【发布时间】:2021-01-14 11:58:40
【问题描述】:
我在一个目录下有大约 500 万个文本文件 - 所有格式都相同(没什么特别的,只是每行带有一些整数的纯文本文件)。我想计算所有这些文件中的最大和最小行数,以及它的两个文件名(一个用于最大值,另一个用于最小值)。
我开始尝试像这样写出所有的行数(然后练习如何从这个列表中找到最小值和最大值):
wc -l `find /some/data/dir/with/text/files/ -type f` > report.txt
但这会给我一个错误:
bash: /usr/bin/wc: 参数列表太长
也许有更好的方法来解决这个问题?
【问题讨论】:
-
请注意,在命令行中使用
$(find ...)或$(ls ...)通常是一种不好的做法 - 请参阅 BashPitfalls #1 和 UsingFind 描述的替代方法。 -
...顺便说一句,鉴于您有数百万个文件,我会考虑在运行行数之前过滤字节数;除非您在行长方面容易出现异常值,否则仅扫描 100,000 个最大和最小文件(以字节为单位,这是一种恒定时间测量操作而不是一个随大小缩放)以行为单位。