Je sais comment sélectionner un champ d'une ligne en utilisant la commande cut. Par exemple, compte tenu des données suivantes:
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Cette commande:
cut -d, -f2 # returns the second field of the input line
Retour:
b
g
l
Ma question: comment puis-je sélectionner le deuxième champ en comptant à la fin? Dans l'exemple précédent, le résultat serait:
d
i
n
Inversez l'entrée avant et après cut
avec rev
:
<infile rev | cut -d, -f2 | rev
Production:
d
i
n
Essayez de le faire avec awk :
awk -F, '{print $(NF-1)}' file.txt
Ou en utilisant Perl :
Perl -F, -lane 'print $F[-2]' file.txt
Ou en utilisant Ruby (merci manatwork):
Ruby -F, -lane 'print $F[-2]' file.txt
Ou en utilisant bash
(merci manatwork):
while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
Ou en utilisant python :
cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'
Utilisation de sed:
sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile
Production:
d
i
n
([^,]*,)*
correspond à n'importe quel nombre de caractères non virgule suivi d'une virgule, c'est-à-dire à n'importe quel nombre de colonnes.([^,]*)
correspond à une colonne.(,[^,]*){1}
correspond à une colonne à la fin, si vous modifiez le quantificateur {1}
à {2}
il correspond à la deuxième colonne de la fin, etc.