Làm cách nào để thêm số dòng trong mỗi dòng bằng lệnh shell?


21

Tập tin của tôi,

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)

Tập tin đầu ra,

 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)

Câu trả lời:


32

Nếu bạn muốn định dạng tương tự mà bạn đã chỉ định

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

mặt khác, mặc dù không phải là tiêu chuẩn, hầu hết các cài đặt của catlệnh có thể in số dòng cho bạn (số được đệm đến chiều rộng 6 và theo sau là TAB trong ít nhất là các triển khai GNU, busybox, Solaris và FreeBSD).

cat -n inputfile > outputfile

Hoặc bạn có thể sử dụng grep -n(các số theo sau :) với biểu thức chính quy ^phù hợp với bất kỳ dòng nào:

grep -n '^' inputfile > outputfile

Có ... cả hai lệnh đều hoạt động .... nhưng trong catlệnh, nó in số dòng ... nhưng không chính xác những gì tôi muốn .... nhưng awk '{print NR "> " $s}' inputfile > outputfilecho tôi đầu ra mong muốn .... :-) @amit kumar
pmaipmui

1
Cũng lưu ý rằng đó cat -nkhông phải là di động. Chỉ có -utùy chọn được chỉ định trong POSIXcat .
vinc17

34

Công cụ phù hợp cho công việc này là nl:

nl -w2 -s'> ' file

Bạn có thể muốn điều chỉnh wtùy chọn idth theo tổng số dòng trong tệp (nếu bạn muốn các số được căn chỉnh độc đáo).

Đầu ra:

 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
nlxử lý các dòng có chứa một chuỗi gồm 1, 2 hoặc 3 \:chuỗi đặc biệt. Sử dụng -d $'\n'để tránh điều đó. Ngoài ra, theo mặc định, nó không đánh số dòng trống. Sử dụng -bađể đánh số mỗi dòng.
Stéphane Chazelas

@ StéphaneChazelas thực sự, cảm ơn rất nhiều! Lưu ý rằng $'...'cú pháp là bash-cụ thể.
myrdd

Trái tim tôi thắt lại khi tôi thấy điều đó seqkhông làm được. Cảm ơn chúa vìnl
Sridhar Sarnobat

1
@myrdd, $'...'xuất phát từ ksh93 và cũng được hỗ trợ bởi zsh, mksh, busybox sh, FreeBSD sh và bash ít nhất. Nó chưa chuẩn, nhưng được lên kế hoạch đưa vào phiên bản POSIX chính tiếp theo.
Stéphane Chazelas

@ StéphaneChazelas cảm ơn. để tham khảo, có một câu hỏi về $'...'tính di động (Trích dẫn ANSI-C): unix.stackexchange.com/questions/371827/ trộm
myrdd 19/2/19

0

tôi đã thực hiện theo phương pháp dưới đây

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

đầu ra

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.