我有2列4000 dat文件。从每个文件中,我需要确定第2列的第一个最小值,并打印相应的行。然后,它将在文件夹中的多个文件上运行,并将这些值附加到新文件中。我已经尝试过下面的代码。
文件名包括公用字符串:
fig_3-28333.dat
^^^^^ file number
awk'BEGIN{min=0}{if(($2)>min) min=($2)}END {print line}' cat >> new.dat
预计输出文件为
file number Column 1 column2
28333 x value first minimum value
28334 x value first minimum value
答案 0 :(得分:0)
注意:这仅适用于gawk
(可以理解ENDFILE
模式),不适用于常规的awk
这是我的脚本 min.awk :
BEGIN {
print "file number Column 1 column2"
}
FNR == 1 {
min = $2;
first = $1
second = $2
}
$2 < min {
min = $2
first = $1
second = $2
}
ENDFILE {
# Extract the file number to a[1]
match(FILENAME, /.*-([0-9]+)\.dat/, a)
print a[1], first, second
}
BEGIN
模式打印标题FNR == 1
),确定最小值$2 < min
)的那些行,确定新的最小值gawk -f min.awk *.dat
查看脚本后,我复制了代码,可以通过合并两个代码块消除这些代码:
BEGIN {
print "file number Column 1 column2"
}
FNR == 1 || $2 < min{
min = $2;
first = $1
second = $2
}
ENDFILE {
# Extract the file number to a[1]
match(FILENAME, /.*-([0-9]+)\.dat/, a)
print a[1], first, second
}