我遇到文件中重复行操作的问题。
在带有多列的制表符分隔文件中,可能只有两列(前两列)定义了两个重复行。这两行已按行排序,这意味着重复的行彼此相邻。我只想保留这两个副本的发送/最终行。
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
答案 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