J'ai un fichier texte comme ça
foo bar baz
1 a alpha
2 b beta
3 c gamma
Je peux utiliser awk pour imprimer certaines colonnes, comme 1 et 3, avec {print $1, $3}
, mais je veux spécifier les colonnes à imprimer en spécifiant à la place l'en-tête de la colonne, quelque chose comme {print $foo, $baz}
. Ceci est utile, donc je n'ai pas à ouvrir le fichier et à compter les colonnes manuellement pour voir quelle colonne est laquelle, et je n'ai pas à mettre à jour le script si le numéro de colonne ou l'ordre change. Puis-je le faire avec awk (ou un autre outil shell)?
la source
print i
etprint $i
etprint
f [$ i] `dans la boucle, etc. pour suivre ce qui se passe si cela vous aide.Vous demandez
awk
, mais vous pouvez également utiliser un outil plus spécialisé pour cela:csvtool
.ou
la source
En supposant que le fichier est un fichier TSV ("valeurs séparées par des tabulations"), en utilisant
csvkit
:La sortie sera correctement formatée CSV, mais pourrait facilement être modifiée en TSV:
L'
-c
option decsvcut
peut également prendre des nombres et des plages, et peut également être utilisée pour réorganiser les colonnes des données d'entrée (une fonctionnalité qui me manque souvent dans l'cut
utilitaire standard ).la source