无法使用 awk/gawk 循环多个输入文件

Fail to cycle multiple input files with awk/gawk

我的子文件夹中有大量文件,每个文件包含三列数字。我需要在 $2 中找到最大的数字,然后打印列 $1 和 $2。

这是我得到的:

awk 'FNR > 1 {max=dist=0; if(>max){dist=; max=}}END{print FILENAME "   distance: " dist "   max: " max}' ./nVT_*K/rdf_rdf_aam_aam_COM.dat

这有效,但是只打印最后一个输入文件的值。我每人都需要一个。

使用 bash for 循环进行迭代为 awk 部分生成了 "command not found"。我目前正在将回显的 for 循环输出传输到一个文件,并将 运行ning 作为脚本,尽管这在长期 运行.

中不是一个可行的计划

任何人都可以帮忙解决这个问题,以便它可以在不同的子文件夹中获取一堆输入文件,并打印每个文件的预期结果:

./nVT_277K/rdf_rdf_aam_aam_COM.dat   distance: 4.650000   max: 1.949975
./nVT_283K/rdf_rdf_aam_aam_COM.dat   distance: 4.650000   max: 1.943047
./nVT_289K/rdf_rdf_aam_aam_COM.dat   distance: 4.650000   max: 1.907280
...
...
...

如果能提供任何信息,我将不胜感激。谢谢

对于 ENDFILE 使用 GNU awk:

awk '
    FNR > 1 { if ((max=="") || (>max)) {dist=; max=} }
    ENDFILE { print FILENAME "   distance: " dist "   max: " max; max=dist="" }
' ./nVT_*K/rdf_rdf_aam_aam_COM.dat

使用任何 awk 并假设您的输入文件不为空:

awk '
    FNR==1 { if (NR>1) print fname "   distance: " dist "   max: " max; max=dist=""; fname=FILENAME; next }
    (max=="") || (>max) {dist=; max=} }
    END { print fname "   distance: " dist "   max: " max }
' ./nVT_*K/rdf_rdf_aam_aam_COM.dat

假设至少有一个正值(这样我们就不需要初始化)

$ awk 'FNR==1    {f=FILENAME}
       >max[f] {max[f]=; dist[f]=} 
       END       {for(f in max) print f, "distance:", dist[f], "max:", max[f]}' files

max 和 distance 由文件名索引,因为在给定路径中必须是唯一的...