【发布时间】:2014-04-02 20:35:17
【问题描述】:
我有一个如下所示的文件,我想保留第三个字段中具有最高值的第一个和第二个字段之间的组合(带有箭头的那些,箭头不包含在实际文件中) .
1 1 10
1 1 12 <-
1 2 6 <-
1 3 4 <-
2 4 32
2 4 37
2 4 39
2 4 40 <-
2 45 12
2 45 15 <-
3 3 12
3 3 15
3 3 17
3 3 19 <-
3 15 4
3 15 9 <-
4 17 25
4 17 28
4 17 32
4 17 36 <-
4 18 4 <-
为了拥有和输出这样的:
1 1 12
1 2 6
1 3 4
2 4 40
2 45 15
3 3 19
3 15 9
4 17 36
4 18 4
我想也许我只是在玩sort 和uniq 命令,但我弄得一团糟。
有什么想法吗?
非常重要的说明:条目没有从头开始排列整齐,我只是使用sort -k1,1 -k2,2 -k3,3
提前谢谢大家
【问题讨论】:
-
sort -r -k1 -k2 -k3 x.txt | awk '{if($i!=l1 && $2!=l2)print $0; l1=$1; l2=$2;}' -
非常聪明的杰瑞,由于排序,我添加了一些东西,我必须指定排序是按数字值,它的结尾是这样的:sort -r -nk1,1 -nk2,2 -nk3,3 | awk '{if($i!=l1 && $2!=l2)print $0; l1=$1; l2=$2;}' 请发布您的解决方案,以便给您一个绿色检查。
-
勾选其他答案之一。我没有将其发布为答案的原因是因为它依赖于代码,并且从您对 sort 和 uniq 的评论中可以清楚地看出,仅使用标准命令即可完成真正的答案。我将其发布为评论的原因是为了以防万一没有其他人提供答案,以便您得到一些有用的东西。
-
你能解释一下 awk '{if($i!=l1 && $2!=l2)print $0; l1=$1; l2=$2;}' 有效吗?