web-dev-qa-db-fra.com

Imprimer les numéros de ligne commençant à zéro avec awk

Quelqu'un peut-il me dire comment imprimer des numéros de ligne comprenant zéro à l'aide de awk? 

Voici mon fichier d'entrée stackfile2.txt

quand je lance la commande awk ci-dessous, je reçois actual_output.txt

awk '{print NR,$0}' stackfile2.txt | tr " ", "," > actual_output.txt

alors que ma sortie attendue est fichier.txt

Comment imprimer les numéros de lignes commençant par zéro (0)?

37
user790049

NR commence à 1, alors utilisez

awk '{print NR-1 "," $0}'
64
Lance Roberts

Utilisation de awk. 

i commence à 0, i++ incrémentera la valeur de i, mais renverra la valeur d'origine que j'ai détenue avant d'être incrémentée.

awk '{print i++ "," $0}' file
11
BMW

Une autre option en plus de awk est nl qui permet d’utiliser les options -v pour définir la valeur initiale et -n <lf,rf,rz> pour gauche, droite et droite, avec les zéros de gauche justifiés. Vous pouvez également inclure -s pour un séparateur de champ tel que -s "," pour une séparation par virgule entre les numéros de ligne et vos données.

Dans un environnement Unix, cela peut être fait comme

cat <infile> | ...other stuff... | nl -v 0 -n rz

ou simplement

nl -v 0 -n rz <infile>

Exemple:

echo "Here 
are
some 
words" > words.txt

cat words.txt | nl -v 0 -n rz

En dehors:

000000      Here
000001      are
000002      some
000003      words
5
Jon

Si Perl est une option, vous pouvez essayer ceci:

Perl -ne 'printf "%s,$_" , $.-1' file

$_ est la ligne
$. est le numéro de la ligne 

0
Chris Koknat