2010-06-25 19 views
8

Supposons que j'ai une commande ps qui ressemble à ceci:Génération d'une liste CSV de « ps » Linux

ps -Ao args:80,time,user --sort time 

Cela me donnera un « espace » Séparées ensemble de lignes. Une ligne pourrait ressembler à ceci

paulnath -bash 00:00:00 

Je voudrais convaincre ps de délimiter par des virgules (ou onglets même!), De telle sorte qu'il peut être traité automagiquement par d'autres langues. S'il vous plaît noter que args aura probablement des espaces, donc, awking par champ ne fonctionnera pas en soi.

Répondre

14

Vous pouvez utiliser la syntaxe suivante pour mettre votre propre delimiter:

ps -Ao "%U,%t,%a" 
+2

Le% est le descripteur de format AIX. Toutes les colonnes ps n'ont pas un tel descripteur. Par exemple, la colonne rsz ne l'a pas. –

-1

Vous pouvez obtenir les informations dont vous avez besoin dans/proc/[0-9] * /. Je pense que vous le trouverez plus programmatique que la sortie de ps.

0

Que diriez-vous:

ps -Ao args:80,time,user --sort time | 
sed 's/\([[:digit:]]\{2\}:\)\{2\}[[:digit:]]\{2\}/,\0,/' 

C'est sensible au format, y compris le temps, et prend les processus ne sont pas des virgules. Ils peuvent, mais si vous voulez échapper à cela, c'est évidemment plus compliqué.

+0

Laissez la ligne de commande à la fin, sinon, si la ligne de commande contient certains ',' il sera difficile d'analyser :) –