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

Unix Bash-如何在文件名后立即打印字数而不断行,bash,unix,scripting,formatting,Bash,Unix,Scripting,Formatting,我试图打印目录中的文件名,行/字计数全部在一行上。我现在的输出方式是: foo.txt 五百 bar.txt 210 。。。 它应该是什么: foo.txt 500 bar.txt 210 我期望的答案是: wc-l|awk{something}这里有一个简单但有缺陷的方法: wc -l *.txt | awk '$2 != "total" { print $2, $1 }' 但是,如果文件名中有空格,则上面将打印在第一个空格处截断的文件名。此外,对total行的检查也很弱,对于一个名为“t

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

foo.txt

五百

bar.txt

210

。。。 它应该是什么:

foo.txt 500

bar.txt 210

我期望的答案是:
wc-l|awk{something}

这里有一个简单但有缺陷的方法:

wc -l *.txt | awk '$2 != "total" { print $2, $1 }'
但是,如果文件名中有空格,则上面将打印在第一个空格处截断的文件名。此外,对total行的检查也很弱,对于一个名为“total disaster.txt”的文件(感谢您的精明批评),检查结果异常糟糕

这里有一个更安全但稍长的解决方案:

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

下面是一个简单但有缺陷的方法:

wc -l *.txt | awk '$2 != "total" { print $2, $1 }'
但是,如果文件名中有空格,则上面将打印在第一个空格处截断的文件名。此外,对total行的检查也很弱,对于一个名为“total disaster.txt”的文件(感谢您的精明批评),检查结果异常糟糕

这里有一个更安全但稍长的解决方案:

wc -l *.txt | awk '{ count = $1; sub("^ *[0-9]+ ", ""); if ($0 != "total") print count, $0 }'
您的问题中提供的示例输入有效吗

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

以下内容适用于您:

for i in *.txt; do echo ${i##*/} `wc -l "$i" | awk '{print $1}'`; done
您的问题中提供的示例输入有效吗

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

以下内容适用于您:

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

您可以使用简单的循环和awk:

对于*.txt中的i

awk'END{printf“%s%d\n”,文件名,NR}'$i
完成

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


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

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

对于*.txt中的i

awk'END{printf“%s%d\n”,文件名,NR}'$i
完成

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


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

似乎就是这样做的(我复制了回音…部分原因是您的循环有点不正确)!谢谢我只是不确定(wc-l…)@janos:如果文件名是
a file.txt
,那么在awk中
$2
的值是多少?那么total disaster.txt呢?@rici有很多优点。我在最新的更新中还遗漏了什么吗?似乎就是这样(我复制了回音…部分原因是你的循环有点不正常)!谢谢我只是不确定(wc-l…)@janos:如果文件名是
a file.txt
,那么在awk中
$2
的值是多少?那么total disaster.txt呢?@rici有很多优点。我在最新的更新中还遗漏了什么?如果你想对
wc
的输出进行重新排序,请尝试例如
wc-l*| awk'{print$2,$1}'
,但它首先打印计数是有原因的;这样,即使是非常病态的文件名,输出也完全不含糊?awk似乎有点过分了。如果你想对
wc
的输出重新排序,可以尝试一下,例如
wc-l*|awk'{print$2,$1}'
,但它首先打印计数是有原因的;这样,即使是非常病态的文件名,输出也完全不含糊?awk似乎有点过分了。请看@janos的答案中的我的问题。请看@janos的答案中的我的问题。