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

tru*_*pty 16 awk

我知道如何获取文本文件中最长行的长度 awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
Run Code Online (Sandbox Code Playgroud)

但是如何获得目录中所有文件的最长行的长度?

lge*_*get 12

最直接的解决方案是连接所有文件并将结果通过管道传输到您的脚本:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
Run Code Online (Sandbox Code Playgroud)

也可以直接传递几个文件给awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
Run Code Online (Sandbox Code Playgroud)

当然,如果文件实际上是目录,可能会有一些警告,但它应该是无害的。二进制文件可能会有更大的问题,因为它们没有line的概念。因此,为了更具体,您可以执行以下操作

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
Run Code Online (Sandbox Code Playgroud)

只匹配.txt当前目录中的文件。

而且,正如@G-Man 在他的评论中所说,*不会匹配隐藏文件(以点开头)。如果你想要这些,请使用* .*.


Sté*_*las 6

如果您想要每个文件的最大长度,请使用 GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +
Run Code Online (Sandbox Code Playgroud)

或者所有文件中的一个最大长度:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'
Run Code Online (Sandbox Code Playgroud)

假设文件以换行符结尾。如果一个文件不以换行符结尾,则其最后一个非分隔行将与下一个文件的第一行合并,并可能使您的结果无效。

-size +1c 是一种优化,因为空文本文件或仅包含一个字符的文本文件分别具有 0 行和 1 行空行,因此不会有最长的行。


Lri*_*Lri 5

使用 GNU wc

cat *.txt|wc -L
Run Code Online (Sandbox Code Playgroud)

-L 打印最长行的长度。