查找并打印多个文件中最长行的长度?

查找并打印多个文件中最长行的长度?

在我的文件夹中,有 2000 个文件,标签为 A0001-A2000。每个文件的第二行,都有一个很长的(应该是最长的)行字符。我想在一个输出中打印所有文件名以及第二行的长度。

所以输出看起来像

A0001 231
A0002 123
A0003 56

如果有帮助的话,我已经有了一个可以打印文件最长行的代码,但如果有更简单的方法,我就不会使用 awk。

$ awk '{print length}' A0001.txt |sort -nr|head -1
231

答案1

awk 'FNR==2{print FILENAME,length; nextfile}' *

glob 扩展到目录中的所有文件,当 Awk 到达第二行时,它会打印文件名及其长度并跳到下一个文件。这nextfile是可选的并且仅用于性能。

如果目录中可能存在非常规文件,请使用Find,这样awk就不会卡住:

find . -type f -maxdepth 1 -exec awk 'FNR==2{print FILENAME,length; nextfile}' {} +

-maxdepth 1使 find 非递归(即它不查找子目录)。-prune如果-maxdepth不可用,您也可以使用。

答案2

如果最大线也许不会在第2行,你可以这样做:

  • 使用 GNU awk

    gawk '
        BEGINFILE {max = -1} 
        length > max {max = length} 
        ENDFILE {print FILENAME, max}
    ' *
    
  • 使用非 GNU awk

    awk '
        FNR == 1 {
            if (filename != "") print filename, max
            filename = FILENAME
            max = -1
        }
        length > max {max = length}
        END {print filename, max}
    ' *
    

答案3

通常 GNU wc 应该可以完成这项工作。

wc -L A*
  • 假设文件不会阻塞命令行。在这种情况下,您可以使用 for 循环或 find 命令。

相关内容