242 votes

Comment obtenir la deuxième colonne de la sortie de commande ?

La sortie de ma commande est quelque chose comme :

1540 "A B"
   6 "C"
 119 "D"

La première colonne est toujours un nombre, suivi d'un espace, puis d'une chaîne de caractères entre guillemets.

Mon but est d'obtenir la deuxième colonne seulement, par exemple :

"A B"
"C"
"D"

J'avais l'intention d'utiliser <some_command> | awk '{print $2}' pour y parvenir. Mais la question est la suivante : certaines valeurs de la deuxième colonne contiennent un ou plusieurs espaces, qui se trouvent être le délimiteur par défaut de l'option awk pour séparer les champs. Par conséquent, la sortie est désordonnée :

"A
"C"
"D"

Comment obtenir proprement la valeur de la deuxième colonne (avec les guillemets) ?

13voto

iiSeymour Points 34967

Si vous avez GNU awk, c'est la solution que vous voulez :

$ awk '{print $1}' FPAT='"[^"]+"' file
"A B"
"C"
"D"

1voto

Vijay Points 17992
awk -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file

0voto

Andy Southwell Points 47
#!/usr/bin/python
import sys 

col = int(sys.argv[1]) - 1

for line in sys.stdin:
    columns = line.split()

    try:
        print(columns[col])
    except IndexError:
        # ignore
        pass

Ensuite, en supposant que vous nommiez le script comme co, disons, faites quelque chose comme ceci pour obtenir les tailles des fichiers (l'exemple suppose que vous utilisez Linux, mais le script lui-même est indépendant de l'OS) :-

ls -lh | co 5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X