无法使用 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 由文件名索引,因为在给定路径中必须是唯一的...
我的子文件夹中有大量文件,每个文件包含三列数字。我需要在 $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 由文件名索引,因为在给定路径中必须是唯一的...