Unix Bash-如何在文件名后立即打印字数而不断行
我试图打印目录中的文件名,行/字计数全部在一行上。我现在的输出方式是: foo.txt 五百 bar.txt 210 。。。 它应该是什么: foo.txt 500 bar.txt 210 我期望的答案是: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
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的答案中的我的问题。