我知道如何获取文本文件中最长行的长度awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
但是如何获取目录中所有文件的最长行的长度呢?
答案1
最直接的解决方案是连接所有文件并将结果通过管道传输到脚本:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
您还可以直接将多个文件传递给 awk:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
当然,如果文件实际上是目录,可能会出现一些警告,但它应该是无害的。二进制文件可能会遇到更大的问题,因为它们没有概念线。因此,为了更具体,您可以执行类似的操作
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
仅匹配.txt
当前目录中的文件。
而且,正如 @G-Man 在他的评论中所说,*
不会匹配隐藏文件(以点开头)。如果您想要这些,请使用* .*
.
答案2
使用 GNU wc
:
cat *.txt|wc -L
-L
打印最长行的长度。
答案3
如果您想要每个文件的最大长度,请使用 GNU awk:
find . -type f -exec awk -v l=0 '
length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +
或者所有文件中的最大长度:
find . -type f -size +1c -exec cat {} + |
awk -v l=0 'length>l {l=length}; END{print l}'
假设文件以换行符结尾。如果一个文件不以换行符结尾,则其最后一个非分隔行将与下一个文件的第一行合并,并可能使结果无效。
-size +1c
是一种优化,因为空或仅包含一个字符的文本文件分别有 0 行和 1 空行,因此不会有最长的行。
答案4
另外使用 GNU wc (coreutils 8.4),它可以处理多个文件
wc -L *.txt
- 列出每个单独文件的长度
- 并提供所有文件的最长长度