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

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

我的文件,

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)

答案1

适合这项工作的工具是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)

答案2

如果您想要与指定的格式相同的格式

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

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

cat -n inputfile > outputfile

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

grep -n '^' inputfile > outputfile

答案3

在 Linux/Unix 中,几乎总是有多种方法来完成常见任务。为了完整起见,除了显而易见的方法之外,您还可以使用以下其他方法:

    pr -t -n [file]

来自旧命令,用于格式化文本以发送到行式打印机。 “-t”将省略与终端无关的页眉和页脚信息。

这是一个可爱的 sed 方法,它每隔一行打印行号。我们使用“粘贴”将它们折叠成一行:

    sed = /etc/passwd | paste - -

或者,我们可以使用一个真正的编辑器,ed:

    echo '1,$n' | ed -s [file]

或者,例如 vi 的非光标寻址前身:

    printf 'set number\ng/^/p\n' | ex /etc/passwd

最后一个复杂的答案,需要 ksh93 或 bash (以及 seq 命令。使用 .. 范围和 eval 语句留作练习):

    paste <(seq $(wc -l < [file])) [file]

在 Debian Linux、FreeBSD 和 Solaris 10 上进行了测试(最后一个由于没有“seq”而失败)。

答案4

我已经通过以下方法完成了

命令: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)

相关内容