我有一个包含2列的列表。在某些行中,第一列具有相同的值。在这种情况下,我要删除第二列中具有较低值的行。示例:输入:
1 10
2 20
3 15
3 5
3 35
4 20
输出:
1 10
2 20
3 35
4 20
是的,确定:
$ awk '{a[$1]=(a[$1]<$2?$2:a[$1])} END {for (i in a) print i, a[i]}' file
1 10
2 20
3 35
4 20
只是继续a[]
使用给定列1的列2的最大值填充数组。最后,打印结果。
这利用了一个事实,即值默认为0
awk。但是,如果某个索引的所有值始终为负或零,则将失败。为此,我们还必须通过检查数组的特定索引是否存在来对脚本进行一些改进:
awk '{a[$1]=(($1 in a) && a[$1]>$2?a[$1]:$2)}
END {for (i in a) print i, a[i]}' file
$ cat a
1 10
2 20
3 -15
3 -5
3 -35
4 20
$ awk '{a[$1]=(($1 in a) && a[$1]>$2?a[$1]:$2)} END {for (i in a) print i, a[i]}' a
1 10
2 20
3 -5
4 20
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句