所以我有一个文件,如:
10 1 abc
10 2 def
10 3 ghi
20 4 elm
20 5 nop
20 6 qrs
30 3 tuv
我想获得第一列每个值的第二列的最大值,即:
10 3 ghi
20 6 qrs
30 3 tuv
如何使用awk
或类似的unix命令?
答案 0 :(得分:7)
您可以使用awk
:
awk '$2>max[$1]{max[$1]=$2; row[$1]=$0} END{for (i in row) print row[i]}' file
<强>输出:强>
10 3 ghi
20 6 qrs
30 3 tuv
<强>解释强>
awk命令使用关联数组max
,关键字为$1
,值为$2
。每当我们遇到已存储在此关联数组max
中的值时,我们就会更新前一个条目并将整行存储在另一个具有相同键的关联数组row
中。最后在END
部分,我们简单地遍历关联数组row
并打印它。
答案 1 :(得分:6)
使用sort
$ sort -k1,1 -k2,2nr file | sort -u -k1,1
10 3 ghi
20 6 qrs
30 3 tuv
按字段1和字段2(数字,反向)排序,以便每个键的最大值将位于组的顶部,然后通过第二种键为每个键选择第一个键。