【发布时间】:2018-01-31 03:37:07
【问题描述】:
我有一个包含两列的文件,看起来像这样:
1 3
1 4
2 3
3 3
4 3
4 4
我想把它做成一个文件,在第一列中具有唯一值,并且重复的行只保留第二列中具有最大值的行,所以新文件如下所示:
1 4
2 3
3 3
4 4
关于如何使用 bash/awk/etc 实现这一点的任何想法?
【问题讨论】:
我有一个包含两列的文件,看起来像这样:
1 3
1 4
2 3
3 3
4 3
4 4
我想把它做成一个文件,在第一列中具有唯一值,并且重复的行只保留第二列中具有最大值的行,所以新文件如下所示:
1 4
2 3
3 3
4 4
关于如何使用 bash/awk/etc 实现这一点的任何想法?
【问题讨论】:
使用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
【讨论】:
awk '$3 > a[$1,$2]{a[$1,$2] = $3} END{for (i in a) print i, a[i]}' file
a[$1 FS $2] 而不是a[$1,$2]。
您能否尝试关注并告诉我这是否对您有帮助,它会为您提供仅 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
【讨论】:
只需使用sort:
sort -k2,2rn file|sort -uk1,1n
【讨论】: