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