Come aggiungere numeri di riga in ogni riga usando il comando shell?


21

Il mio file,

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)

File di uscita,

 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)

Risposte:


32

Se si desidera lo stesso formato specificato

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

altrimenti, sebbene non standard, la maggior parte delle implementazioni del catcomando può stampare numeri di riga per te (numeri riempiti fino alla larghezza 6 e seguiti da TAB almeno nelle implementazioni GNU, busybox, Solaris e FreeBSD).

cat -n inputfile > outputfile

Oppure puoi usare grep -n(numeri seguiti da :) con una regexp come ^quella che corrisponde a qualsiasi riga:

grep -n '^' inputfile > outputfile

Sì ... entrambi i comandi funzionano .... ma al catcomando stampa i numeri di riga ... ma non esattamente quello che volevo .... ma awk '{print NR "> " $s}' inputfile > outputfilemi dà l'output desiderato .... :-) @amit kumar
pmaipmui,

1
Si noti inoltre che cat -nnon è portatile. Solo l' -uopzione è specificata in POSIXcat .
vinc17,

34

Lo strumento giusto per questo lavoro è nl:

nl -w2 -s'> ' file

È possibile che si desideri ottimizzare wl'opzione idth in base al numero totale di righe nel file (se si desidera allineare correttamente i numeri).

Produzione:

 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)

2
nltratta le righe che contengono una sequenza di 1, 2 o 3 \:stringhe in particolare. Usa -d $'\n'per evitarlo. Inoltre, per impostazione predefinita, non numera le righe vuote. Utilizzare -baper numerare ogni riga.
Stéphane Chazelas,

@StéphaneChazelas davvero, grazie mille! Nota che la $'...'sintassi è specifica per bash.
myrdd,

Il mio cuore è affondato quando ho visto che seqnon lo faceva. Grazie a Dio pernl
Sridhar Sarnobat,

1
@myrdd, $'...'proviene da ksh93 ed è anche supportato da zsh, mksh, busybox sh, FreeBSD sh e bash almeno. Non è ancora standard, ma è previsto l'inclusione nella prossima versione principale di POSIX.
Stéphane Chazelas,

@ StéphaneChazelas grazie. come riferimento, c'è una domanda sulla $'...'portabilità (ANSI-C Quoting
myrdd

0

ho fatto con il metodo seguente

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

produzione

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.