如何使用awk根据前两个字段找出第三个字段的最小值



名为test.file的文件内容如下:

333379266       834640619       88
333379280       834640621       99
333379280       834640621       66
333376672       857526666       99
333376672       857526666       78
333376672       857526666       62

前两列可能是重复的,我想输出前两列和第三列对应的最小值。在这种情况下,结果文件应如下所示:

333379280 834640621 66
333379266 834640619 88
333376672 857526666 62

我的尝试是:

awk '{a[$1" "$2]=99999;a[$1" "$2]=a[$1" "$2]<$3?a[$1" "$2]:$3}END{for(i in a) print i,a[i]}' test.file

我的问题是:

是否有任何other way可以实现这一要求。

您能尝试以下操作来查找整个Input_file中第一个和第二个字段键的最小值吗。

awk '
{
ind=$1 OFS $2
array[ind]=(array[ind]<$3?(array[ind]?array[ind]:$3):$3)
}
END{
for(i in array){
print i,array[i]
}
}'  Input_file

或者根据@kent的评论,添加以下解决方案,并附加一个条件,以检查第三个字段中的空值,如下所示。

awk '
{
ind=$1 OFS $2
array[ind]=(array[ind]<$3||array[ind]==""?(array[ind]?array[ind]:$3):$3)
}
END{
for(i in array){
print i,array[i]
}
}' Input_file

解释:添加对上述代码的详细解释。

awk '                                                                ##Starting awk program from here.
{
ind=$1 OFS $2                                                      ##Creating variable ind whose value is 1st and 2nd field.
array[ind]=(array[ind]<$3?(array[ind]?array[ind]:$3):$3)           ##Creating array with index of variable ind and checking if its value is lesser than $3 then keep it same else assign $3 to it.
}
END{                                                                 ##Starting END block for this awk program here.
for(i in array){                                                   ##Traversing through all elements of array here.
print i,array[i]                                                ##Printing key of array and value of array here.
}
}'  Input_file                                                       ##Mentioning Input_file name here.

相关内容

  • 没有找到相关文章

最新更新