查找目录中所有文本文件中最长行的长度

查找目录中所有文本文件中最长行的长度

我知道如何获取文本文件中最长行的长度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
  • 列出每个单独文件的长度
  • 并提供所有文件的最长长度

相关内容