在 `wc -l` 输出中抑制汇总信息

4

我使用命令wc -l来计算文本文件中的行数(同时我想通过管道对所有内容进行排序),就像这样:

wc -l $directory-path/*.txt | sort -rn

输出结果包括“total”行,它是所有文件行数的总和:
10 total
5 ./directory/1.txt
3 ./directory/2.txt
2 ./directory/3.txt

有没有办法抑制这个摘要行?或者更好的是,改变摘要行的措辞方式?例如,将“10”改为“行”,将“total”改为“文件”。


wcman 页面没有提到这样的功能。你可以编写一个脚本(或者可能使用管道和 awk)来改变输出的外观。 - user554546
1
将其管道传输到 tail +2 以跳过第一行。 - Barmar
@Barmar: 那是不可靠的。只有在存在多个文件时才会打印total行。至少在我的系统上,total行是在最后打印的——正如POSIX明确要求的那样。ipo:你真的会得到你展示的输出吗?它会在顶部显示10 total行吗? - Keith Thompson
2
根据您的评论,我认为您在顶部看到“总共10个”是因为您正在对输出进行排序。您需要在问题中提到这一点。向我们展示您正在运行的确切命令及其确切输出。而$directory-path不是一个有效的变量名。 - Keith Thompson
12个回答

0

您可以使用GNU Parallel来简洁地解决它(以及许多其他需要for循环的问题),如下所示:

parallel wc -l ::: tmp/*txt

示例输出

   3 tmp/lines.txt
   5 tmp/unfiltered.txt
  42 tmp/file.txt
   6 tmp/used.txt

如果您的文件非常大,请使用“parallel -j1”,否则并行请求数据将会拥堵您的磁盘。 - liborm
可能,尽管现在许多人都使用非常快速的固态硬盘,而且没有迹象表明OP正在使用过大的文件,实际上在那种情况下使用GNU Parallel可能是一个优势。 - Mark Setchell

0
大多数答案都集中在删除不需要的行或使用允许抑制它的wc版本,但是从一开始就不产生它也有其优点。
所以你想要计算$directory-path/*.txt文件中的行数,然而将多个文件传递给wc会产生总数——这是你不想要的。
我会改变你的流程,逐个找到文件并将它们逐个传递给wc,如下所示:
find $directory-path -name "*.txt" | xargs -L 1 wc -l | sort -rn

在这种情况下,find 负责定位文件,而 xargs -L 1 负责逐个将它们传递给 wc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接