Unix 如何删除awk中第一列和第二列下的行?
我有一个有两列的列表。在某些行中,第一列中的值相同。在本例中,我希望删除第二列中值较低的行。 例子: 输入: 输出:Unix 如何删除awk中第一列和第二列下的行?,unix,awk,Unix,Awk,我有一个有两列的列表。在某些行中,第一列中的值相同。在本例中,我希望删除第二列中值较低的行。 例子: 输入: 输出: 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 试验 请给我们看看你的密码,你是对的。我想了想,但是让输入的样本值为正值会让我想到“简单”的方法。事实上,我通常会想到
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
试验
请给我们看看你的密码,你是对的。我想了想,但是让输入的样本值为正值会让我想到“简单”的方法。事实上,我通常会想到简单的方法,然后添加健全性检查。我刚刚添加了它,然后我注意到它几乎与您在之前的评论中建议的完全相同@埃德蒙顿你要么写一本书!或者至少开始在这个网站上写规范的问题/答案,这样它们就很容易找到,而不会被用户特定的情况“弄脏”。例如,看看他们在Unix和Linux中做了什么:是的,总有一天。。。。。我曾经为awk.info提供过解决方案(请参阅),但该网站的所有者退出了,所以现在不幸的是,它没有维护,我当然不想承担这项工作@fedorqui我认为不能保证,这些行将按索引排序打印。这可能取决于所使用的awk。
$ 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
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