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

时间:2015-10-03 17:44:51

标签: bash unix scripting formatting

我正在尝试在我的目录中打印文件名,其中行/字计数全部在一行上。我的输出现在的方式:

foo.txt的

500

跳回到bar.txt

210

... 应该是什么:

foo.txt 500

bar.txt 210 ...

我期待的答案如下: wc -l | awk {something}

3 个答案:

答案 0 :(得分:0)

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

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

但是,如果文件名中有空格,则上面将打印在第一个空格处截断的那些文件名。此外,对总线的检查也很弱,并且对于一个名为“total disaster.txt”的文件而言非常突破(感谢@rici对于精明的批评)。

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

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

答案 1 :(得分:0)

你可以使用一个简单的循环,和awk:

表示我在* .txt中 做
awk'END {printf“%s%d \ n”,FILENAME,NR}'$ i
完成

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

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

答案 2 :(得分:-1)

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

您的问题中是否提供了示例输入的工作?

  

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

以下内容对您有用:

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