web-dev-qa-db-fra.com

Comment ajouter des numéros de ligne dans chaque ligne à l'aide de la commande Shell?

Mon fichier,

PSS-A  (Primary A)
PSS-B  (Primary B)
PSS-C  (Primary C)
PSS-D  (Primary D)
PSS-E  (Primary E)
PSS-F  (Primary F)
PSS-G  (Primary G)
PSS-H  (Primary H)
PSS-I  (Primary I)
SPARE  (SPARE)

Fichier de sortie,

 1> PSS-A  (Primary A)
 2> PSS-B  (Primary B)
 3> PSS-C  (Primary C)
 4> PSS-D  (Primary D)
 5> PSS-E  (Primary E)
 6> PSS-F  (Primary F)
 7> PSS-G  (Primary G)
 8> PSS-H  (Primary H)
 9> PSS-I  (Primary I)
10> SPARE  (SPARE)
19
pmaipmui

Si vous voulez le même format que vous avez spécifié

awk '{print NR  "> " $s}' inputfile > outputfile

sinon, bien que non standard, la plupart des implémentations de la commande cat peuvent imprimer des numéros de ligne pour vous (nombres remplis à la largeur 6 et suivis de TAB dans au moins les implémentations GNU, busybox, Solaris et FreeBSD).

cat -n inputfile > outputfile

Ou vous pouvez utiliser grep -n (nombres suivis de :) avec une expression rationnelle comme ^ qui correspond à n'importe quelle ligne:

grep -n '^' inputfile > outputfile
26
amisax

Le bon outil pour ce travail est nl:

nl -w2 -s'> ' file

Vous voudrez peut-être régler l'option width en fonction du nombre total de lignes dans le fichier (si vous voulez que les nombres soient bien alignés).

Production:

 1> PSS-A  (Primary A)
 2> PSS-B  (Primary B)
 3> PSS-C  (Primary C)
 4> PSS-D  (Primary D)
 5> PSS-E  (Primary E)
 6> PSS-F  (Primary F)
 7> PSS-G  (Primary G)
 8> PSS-H  (Primary H)
 9> PSS-I  (Primary I)
10> SPARE  (SPARE)
31
jimmij

j'ai fait par la méthode ci-dessous

commande: cat -n filename |sed -r "s/^\s+//g"| sed "s/^[0-9]*/&\> /g"

production

cat -n u.txt |sed -r "s/^\s+//g"| sed "s/^[0-9]*/&\> /g"
1>  PSS-A  (Primary A)
2>  PSS-B  (Primary B)
3>  PSS-C  (Primary C)
4>  PSS-D  (Primary D)
5>  PSS-E  (Primary E)
6>  PSS-F  (Primary F)
7>  PSS-G  (Primary G)
8>  PSS-H  (Primary H)
9>  PSS-I  (Primary I)
10>     SPARE  (SPARE)
0
Praveen Kumar BS