【发布时间】:2014-05-30 14:01:56
【问题描述】:
我想获得一个编号的文件列表,例如如果我有这些文件:
a.pdf
b.pdf
c
那么它应该被列为:
1 a.pdf
2 b.pdf
3 c
【问题讨论】:
-
不需要坚持 awk 命令。事实上,对于您的问题,使用 awk 可能是更糟糕的选择。
我想获得一个编号的文件列表,例如如果我有这些文件:
a.pdf
b.pdf
c
那么它应该被列为:
1 a.pdf
2 b.pdf
3 c
【问题讨论】:
您可以通过两种方式做到这一点:-
第一个:-ls -1 | awk '{print NR,$0}'
第二个:-ls -1 | cat -n
你必须更喜欢第二个,但选择你喜欢的任何一个。 :-)
【讨论】:
ls -l 几乎从来都不是一个好主意,并且会在此处破坏带有空格的文件名。
ls 中不需要-1 标志:当您将输出传送到另一个进程时,它是默认设置。
如果你想avoid parsing the output of ls(你这样做),你可以这样做:
$ counter=1; for f in *; do printf "%2d %s\n" $((counter++)) "$f"; done
1 a.pdf
2 b.pdf
3 c
我之所以提到这一点,是因为它是做更复杂的事情的途径,而不仅仅是枚举。
【讨论】:
如果你的系统有命令nl,那就更简单了。 (我可以确认nl命令存在于cygwin、aix和solaris系统中,那么它应该是大多数unix系统中的流行命令)
ls |nl
【讨论】:
你可以在没有 awk 的情况下做到这一点,很简单。 ls -1 | cat -n.
或者,使用 awk:
ls -1 | awk '{printf "%d %s\n", NR, $0;}'
【讨论】:
不知道为什么需要使用awk,但你可以这样做:
ls | awk '{print NR, $0}'
更新 $0 比 $1 更好,因为它会打印整个文件名,即使有空格(如 BroSlow 所暗示的那样)
注意 - 当输出是另一个进程时,您确实不需要需要将 -1 标志与 ls 一起使用 - 它成为默认选项。只有当你想强制输出到终端,每行一个文件时,你才需要使用它。
【讨论】:
Floris 所说的。也不知道你为什么接受你所做的答案,它对awk 的使用是相当多余的,并且会用空格破坏文件名。