繁体   English   中英

Unix Bash-如何在文件名后立即打印字数,而无需换行

[英]Unix Bash- How to print word count immediately after file name without line break

我试图将目录中的文件名与行/字数全部打印在一行上。 我现在的输出方式是:

foo.txt

500

bar.txt

210

...应该是什么:

foo.txt 500

bar.txt 210 ...

我期望答案看起来像什么:wc -l | awk {something}

这是一种简单但有缺陷的方法:

wc -l *.txt | awk '$2 != "total" { print $2, $1 }'

但是,如果文件名中有空格,则上面的命令将在第一个空格处打印掉那些文件名。 同样,对总数的限制也很薄弱,对于名为“ totalrash.txt ”的文件来说,它会中断很多(感谢@rici的精明批评)。

这是一个更安全,但时间更长的解决方案:

wc -l *.txt | awk '{ count = $1; sub("^ *[0-9]+ ", ""); if ($0 != "total") print count, $0 }'

您可以使用一个简单的循环,然后awk:

为我在* .txt中

awk'END {printf“%s%d \\ n”,FILENAME,NR}'$ i
做完了

或者,您可以像这样使用wc -l:

wc -l * .txt | awk'$ 2!=“总计” {printf“%s%d \\ n”,$ 2,$ 1}'

 wc -l *.txt |  awk '{print $2,$1}'

您的问题中提供的样本输入是否有用?

一些用户担心文件名中不必要的空格字符

以下应该为您工作:

for i in *.txt; do echo ${i##*/} `wc -l "$i" | awk '{print $1}'`; done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM