Wie füge ich mit dem Shell-Befehl Zeilennummern in jede Zeile ein?

19

Meine Datei,

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)

Ausgabedatei,

 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)
pmaipmui
quelle

Antworten:

26

Wenn Sie dasselbe Format möchten, das Sie angegeben haben

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

Andernfalls können die meisten Implementierungen des catBefehls Zeilennummern für Sie drucken , obwohl dies nicht Standard ist (Nummern, die auf Breite 6 aufgefüllt sind und in mindestens den Implementierungen GNU, Busybox, Solaris und FreeBSD von TAB gefolgt werden).

cat -n inputfile > outputfile

Oder Sie können grep -n(Zahlen gefolgt von :) mit einem regulären Ausdruck verwenden ^, der mit jeder Zeile übereinstimmt:

grep -n '^' inputfile > outputfile
Amisax
quelle
Ja ... beide Befehle funktionieren ... aber im catBefehl werden die Zeilennummern gedruckt ... aber nicht genau das, was ich wollte ... aber es awk '{print NR "> " $s}' inputfile > outputfilegibt mir die gewünschte Ausgabe ... :-) @amit kumar
Pmaipmui
1
Beachten Sie auch, dass cat -nnicht tragbar ist. -uIn POSIXcat ist nur die Option angegeben .
vinc17
33

Das richtige Werkzeug für diesen Job ist nl:

nl -w2 -s'> ' file

Möglicherweise möchten wSie die Option idth entsprechend der Gesamtzahl der Zeilen in der Datei anpassen (wenn Sie möchten, dass die Zahlen gut ausgerichtet sind).

Ausgabe:

 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)
jimmij
quelle
2
nlbehandelt \:speziell Zeilen, die eine Folge von 1, 2 oder 3 Zeichenfolgen enthalten. Verwenden Sie -d $'\n', um das zu vermeiden. Außerdem werden standardmäßig keine Leerzeilen nummeriert. Verwenden Sie -badiese Option, um jede Zeile zu nummerieren.
Stéphane Chazelas
@ StéphaneChazelas in der Tat, vielen Dank! Beachten Sie, dass die $'...'Syntax bash-spezifisch ist.
Myrdd
Mein Herz sank, als ich sah, dass seqes das nicht tat. Gott sei Dank fürnl
Sridhar Sarnobat
1
@myrdd, $'...'kommt von ksh93 und wird auch von unterstützt zsh, mksh, busybox sh, FreeBSD sh und bash mindestens. Es ist noch nicht Standard, soll aber in die nächste große POSIX-Version aufgenommen werden.
Stéphane Chazelas
@ StéphaneChazelas danke. Als Referenz gibt es eine Frage zur $'...'Portabilität (ANSI-C Quoting): unix.stackexchange.com/questions/371827/…
myrdd
0

Ich habe nach der folgenden Methode getan

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

Ausgabe

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)
Praveen Kumar BS
quelle