Bagaimana cara menambahkan nomor baris di setiap baris menggunakan perintah shell?


21

File saya,

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)

Berkas keluaran,

 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)

Jawaban:


32

Jika Anda menginginkan format yang sama dengan yang Anda tentukan

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

jika tidak, meskipun tidak standar, sebagian besar implementasi catperintah dapat mencetak nomor baris untuk Anda (angka yang diisi hingga lebar 6 dan diikuti oleh TAB setidaknya dalam implementasi GNU, busybox, Solaris dan FreeBSD).

cat -n inputfile > outputfile

Atau Anda dapat menggunakan grep -n(angka diikuti oleh :) dengan regexp seperti ^yang cocok dengan baris apa pun:

grep -n '^' inputfile > outputfile

Ya ... kedua perintah bekerja .... tetapi dalam catperintahnya mencetak nomor baris ... tapi tidak persis apa yang saya inginkan .... tetapi awk '{print NR "> " $s}' inputfile > outputfilememberi saya output yang diinginkan .... :-) @ kumit kumar
pmaipmui

1
Perhatikan juga bahwa cat -nitu tidak portabel. Hanya -uopsi yang ditentukan dalam POSIXcat .
vinc17

34

Alat yang tepat untuk pekerjaan ini adalah nl:

nl -w2 -s'> ' file

Anda mungkin ingin menyetel wopsi idth sesuai dengan jumlah total baris dalam file (jika Anda ingin angka disejajarkan dengan baik).

Keluaran:

 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
nlmemperlakukan garis yang mengandung urutan 1, 2 atau 3 \:string secara khusus. Gunakan -d $'\n'untuk menghindari itu. Juga, secara default, itu tidak nomor garis kosong. Gunakan -bauntuk memberi nomor setiap baris.
Stéphane Chazelas

@ StéphaneChazelas memang, terima kasih banyak! Perhatikan bahwa $'...'sintaksnya khusus untuk bash.
myrdd

Hati saya sedih ketika saya melihat itu seqtidak berhasil. Terima kasih Tuhan untuknl
Sridhar Sarnobat

1
@myrdd, $'...'berasal dari ksh93 dan juga didukung oleh zsh, mksh, busybox sh, FreeBSD sh dan bash setidaknya. Ini belum standar, tetapi direncanakan untuk dimasukkan dalam versi POSIX utama berikutnya.
Stéphane Chazelas

@ StéphaneChazelas terima kasih. untuk referensi, ada pertanyaan tentang $'...'portabilitas (ANSI-C) portabilitas: unix.stackexchange.com/questions/371827/…
myrdd

0

saya lakukan dengan metode di bawah ini

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

keluaran

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.