我有这样的输入:
LineA parameter1 parameter2 56
LineB parameter1 parameter2 87
LineB parameter1 parameter2 56
LineB parameter1 parameter2 90
LineC parameter1 parameter2 40
我想打印每一行,但是,如果第一列($1
)重复,则只打印最后一列($4
)中具有最高值的行。
所以输出应该如下所示:
LineA parameter1 parameter2 56
LineB parameter1 parameter2 90
LineC ...
答案 0 :(得分:2)
尝试以下(假设字段4始终> = 0)
数组b
用于跟踪字段4中字段1中唯一值的最高值。数组a
(由字段1键控)包含相应的记录。处理每条记录时,记录将添加到数组a
,字段4将添加到数组b
,如果
1.第一次在字段1中遇到一个值,或者2.字段4中的值超过字段1中值b
中的现有值。
最后,打印出数组a
。
awk '$4 > b[$1] {a[$1] = $0; b[$1] = $4}
END{for (x in a) {print a[x]}}'
答案 1 :(得分:2)
GNU代码awk:
awk 'BEGIN {SUBSEP=OFS} $4>a[$1,$2,$3] {a[$1,$2,$3]=$4} END {for (i in a) {print i,a[i]}}' file
答案 2 :(得分:0)
awk
中的另一种方式:
awk '
fld1!=$1 && NR>1 {print line}
fld1==$1 {line=(fld4>$4)?line:$0;next}
{line=$0;fld1=$1;fld4=$4;next}
END{print line}' file