0

我有这样的输入:

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 ...
4

3 回答 3

2

尝试以下(假设字段 4 始终 >= 0)

数组b用于跟踪字段 4 中字段 1 中唯一值的最大值。数组a(由字段 1 键入)包含相应的记录。处理每条记录时,a如果b1. 第一次在字段 1 中遇到值或 2. 字段 4 中的值超过了现有b值字段 1. 最后a打印出数组。

 awk '$4 > b[$1] {a[$1] = $0; b[$1] = $4}
 END{for (x in a) {print a[x]}}'
于 2013-06-25T18:09:13.870 回答
2

GNU 的代码:

awk 'BEGIN {SUBSEP=OFS} $4>a[$1,$2,$3] {a[$1,$2,$3]=$4} END {for (i in a) {print i,a[i]}}' file
于 2013-06-25T22:35:29.453 回答
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
于 2013-06-26T18:03:38.843 回答