Unix bash:根据另一列的值,在一列中选择具有唯一值的行

时间:2017-08-22 18:28:48

标签: bash awk unique

我有一个包含两列的文件,如下所示:

1 3
1 4
2 3
3 3
4 3
4 4

我想将它变成一个在第一列中具有唯一值的文件,并且重复行只保留第二列中具有最大值的行,因此新文件如下所示:

1 4
2 3
3 3
4 4

有关如何使用bash / awk / etc实现此目的的任何想法?

3 个答案:

答案 0 :(得分:2)

使用awk您可以使用关键数组来管理它,该关键数组的键为列-1,值为列-2的最大值:

awk '$2 > a[$1]{a[$1] = $2} END{for (i in a) print i, a[i]}' file

1 4
2 3
3 3
4 4

答案 1 :(得分:1)

请问您可以尝试关注并告诉我这是否对您有所帮助,它会为您提供仅1美元的最新值以及与Input_file的$ 1相同的非重复值。

awk '!a[$1]{b[++i]=$1} {a[$1]=$0;} END{for(j=1;j<=i;j++){print a[b[j]]}}'  Input_file

答案 2 :(得分:1)

使用sort:

sort -k2,2rn file|sort -uk1,1n