Bash 计算一个文件中定义了要显示的长度的行数

Bash 计算一个文件中定义了要显示的长度的行数,bash,perl,awk,wc,Bash,Perl,Awk,Wc,我想计算一个文件中有多少行定义了要显示的长度 在正常情况下,例如: 文件: cat文件| wc-l将显示结果:3 但我想定义数字的长度,例如有10个符号,并显示: 0000000003 如果有100条线路需要连接: 0000000100 我想你想要这样的东西: printf '%010d' $(wc -l < file) printf 'Count: %010d' $(( $(wc -l < file) + 1 )) 在这里,我向格式说明符添加了一些额外的文本,并使用算术上下

我想计算一个文件中有多少行定义了要显示的长度

在正常情况下,例如:

文件:

cat文件| wc-l
将显示结果:
3

但我想定义数字的长度,例如有10个符号,并显示:

0000000003
如果有100条线路需要连接:

0000000100

我想你想要这样的东西:

printf '%010d' $(wc -l < file)
printf 'Count: %010d' $(( $(wc -l < file) + 1 ))
在这里,我向格式说明符添加了一些额外的文本,并使用算术上下文
$(())
将一个文本添加到行计数的值中

perl -ne '}{ printf("%010d\n", $.)' file
使用awk在perl中引用

awk 'END{printf("%010d\n",NR)}' file

类似:是否要将计数添加到整个结果中并求和+1?@KalinBorisov您可能可以执行
printf“%010d\n”$(($(wc-l
。请注意,这种
awk
方法比
wc
选项慢得多,我想这是因为
wc
更优化,因为它是这项工作的工具。我只是比较了做
seq 10000000>a
,然后用这两种方法计数
wc
快了7倍!当然,时间几乎可以忽略不计,只是为了好玩而比较。@fedorqui您的计时是否包括使用printf或类似工具格式化wc输出的数字?当我将awk解决方案与
printf”%010d\n“$(wc-l
进行比较时,我发现时间大约为1:3,而不是1:7。当然,正如您所期望的,wc速度更快,因为它不尝试将行拆分为字段并为每行填充内置变量。@EdMorton不,我只是比较了
wc-l real 0m0.052s用户0m0.039s sys 0m0.013s
awk-->real 0m0.373s用户0m0.366s sys 0m0.005s
awk 'END{printf("%010d\n",NR)}' file