如何使用shell命令在每行中添加行号?


21

我的档案

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)

Answers:


32

如果要使用指定的格式

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

否则,尽管不是标准的,但大多数cat命令实现都可以为您打印行号(至少在GNU,busybox,Solaris和FreeBSD实现中,数字填充为宽度6,后跟TAB)。

cat -n inputfile > outputfile

或者,您可以将grep -n(数字后跟:)与正则表达式^匹配使用,以匹配任意行:

grep -n '^' inputfile > outputfile

是的...这两个命令都工作....但在cat命令其打印的行号...但不正是我想要的....但awk '{print NR "> " $s}' inputfile > outputfile给了我所需要的输出.... :-) @amit库马尔
pmaipmui 2015年

1
还请注意,这cat -n是不可移植的。-uPOSIX中cat仅指定选项。
vinc17

35

这项工作的正确工具是nl

nl -w2 -s'> ' file

您可能要w根据文件中的总行数调整idth选项(如果您希望数字精确对齐)。

输出:

 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)

3
nl特别处理包含1、2或3个\:字符串序列的行。使用-d $'\n'避免这种情况。同样,默认情况下,它不对空行编号。用于-ba给每一行编号。
斯特凡Chazelas

@StéphaneChazelas的确,非常感谢!请注意,$'...'语法是bash特定的。
myrdd

当我看到那seq没有做到时,我的心就沉了下去。感谢上帝nl
Sridhar Sarnobat,

1
@myrdd,$'...'来自ksh93的,并且也受到支持zshmksh,busybox的SH,FreeBSD的SH和bash至少。它不是标准的,但是计划包含在下一个主要的POSIX版本中。
—StéphaneChazelas

@StéphaneChazelas谢谢。作为参考,有一个关于$'...'(ANSI-C报价)可移植性的问题:unix.stackexchange.com/questions/371827/…–
myrdd

0

我已经通过以下方法完成

命令: 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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.