bash: split output de la commande par colonnes

Je veux faire ceci:

  1. exécuter une commande
  2. capturer la sortie
  3. sélectionnez une ligne
  4. sélectionnez une colonne de cette ligne

Un exemple, disons que je veux obtenir le nom de la commande à partir d'un $PID (veuillez noter que ceci est juste un exemple, je ne dis pas que c'est la meilleure façon d'obtenir un nom de commande à partir d'un id de processus - mon vrai problème, c'est avec une autre commande dont le format de sortie que je ne contrôle pas).

Si je lance ps j'obtiens:


  PID TTY          TIME CMD
11383 pts/1    00:00:00 bash
11771 pts/1    00:00:00 ps
 

Maintenant, je ne ps | egrep 11383 et obtenir

11383 pts/1    00:00:00 bash

Prochaine étape: ps | egrep 11383 | cut -d" " -f 4. Sortie:

<absolutely nothing/>

Le problème est que cut coupe la sortie par des espaces simples, et que ps ajoute de certains espaces entre les 2e et 3e colonnes de garder une certaine ressemblance d'une table, cut choisit une chaîne vide. Bien sûr, je pourrais utiliser cut pour sélectionner le 7 et non le 4ème champ, mais comment puis-je le sais, spécialement lorsque la sortie est variable et inconnue à l'avance.

  • Utiliser awk (et plus de 25 caractères).
InformationsquelleAutor flybywire | 2009-10-27