在我的文件夹中,有 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 命令。