web-dev-qa-db-ja.com

シェルコマンドを使用してすべての行に行番号を追加する方法

私のファイル、

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)

出力ファイル、

 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

指定したものと同じ形式が必要な場合

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

それ以外の場合、標準ではありませんが、catコマンドのほとんどの実装では、行番号を表示できます(幅が6になるまでパディングされ、少なくともGNU、busybox、Solaris、およびFreeBSDの実装ではTABが続きます)。

cat -n inputfile > outputfile

または、grep -n(数字の後に:が続く)を、任意の行に一致する^のような正規表現で使用できます。

grep -n '^' inputfile > outputfile
26
amisax

このジョブに適したツールはnlです。

nl -w2 -s'> ' file

ファイル内の合計行数に応じてwidthオプションを調整することもできます(数値を適切に整列させる場合)。

出力:

 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

以下の方法で行いました

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

出力

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