保存由两列定义的第二个或最后一个重复行(全部使用整数并排序)

时间:2011-06-15 10:39:01

标签: linux unix sed awk

我遇到文件中重复行操作的问题。

在带有多列的制表符分隔文件中,可能只有两列(前两列)定义了两个重复行。这两行已按行排序,这意味着重复的行彼此相邻。我只想保留这两个副本的发送/最终行。

我当前的文件(制表符分隔,多列,行按第一列排序)

1 100 A T
1 101 T C
1 101 T TT
2 1000 C T
2 1001 T A
我想要的

文件,删除前两列定义的第一个副本,保存所有其他行和列。

1 100 A T
1 101 T TT
2 1000 C T

我想对你的文字操作有所帮助。我试过sed和awk。但是,我不能自己这样做。你能否对我的问题给出任何暗示?

提前致谢。

最佳, 2 1001 T A

1 个答案:

答案 0 :(得分:1)

或许这样的事情:

{
    lines[NR] = $0
}
END {
    for(i=1;i<=length(lines);i++){
        split(lines[i], current)
        split(lines[i+1], after)
        if((current[1] == after[1]) && (current[2] == after[2])){
            print lines[i+1]
            i+=1
        }
        else{
            print lines[i]
        }
    }
}

输出:

$ awk -f s.awk input
1 100 A T
1 101 T TT
2 1000 C T
2 1001 T A

或者@ripat指出,使用sort(与tac一起首先反转列表,以便选择第二个匹配):

$ tac input | sort -k1,1n -k2,2n -u
1 100 A T
1 101 T TT
2 1000 C T
2 1001 T A

说真的,开始接受你收到的一些答案!否则,人们花时间回答你问题的概率将非常接近0,阅读常见问题https://stackoverflow.com/faq