我有一个看起来像这样的表:
name something
1 100036498|F|0--20:T>G something
2 100036501|F|0--44:C>T something
3 100036501|F|0-44:C>T-44:C>T something
4 100036508|F|0--66:T>G something
5 100036508|F|0-66:T>G-66:T>G something
6 100036511|F|0-19:G>A-19:G>A something
7 100036516|F|0--15:T>G something
8 100036516|F|0-15:T>G-15:T>G something
... ....
我添加了行号,以便更容易理解我的问题。有一些行对以相同的数字开头,如第 2 行和第 3 行、第 4 行和第 5 行、第 7 行和第 8 行。还有一些行具有唯一性,如第 1 行和第 6 行。我只想保留具有一对的行或者换句话说,消除没有一对的行以具有如下所示的表:
name something
2 100036501|F|0--44:C>T something
3 100036501|F|0-44:C>T-44:C>T something
4 100036508|F|0--66:T>G something
5 100036508|F|0-66:T>G-66:T>G something
7 100036516|F|0--15:T>G something
8 100036516|F|0-15:T>G-15:T>G something
... ....
我想要类似于 linux 命令的相反命令独特的只考虑第一列的数字,而不考虑符号之后的其余部分|。
你知道该怎么做吗?
下面是相同的第一个表,其中各列由一个空格分隔,并且没有标题,以便更容易复制。
100036498|F|0--20:T>G something
100036501|F|0--44:C>T something
100036501|F|0-44:C>T-44:C>T something
100036508|F|0--66:T>G something
100036508|F|0-66:T>G-66:T>G something
100036511|F|0-19:G>A-19:G>A something
100036516|F|0--15:T>G something
100036516|F|0-15:T>G-15:T>G something
答案1
这是一个awk
解决方案,它保留重复多次的行,如果您希望这些行仅重复两次,请更改>1
为==2
awk -F'|' 'NR==FNR{s[$1]++;next} (s[$1]>1)' infile infile
100036501|F|0--44:C>T something
100036501|F|0-44:C>T-44:C>T something
100036508|F|0--66:T>G something
100036508|F|0-66:T>G-66:T>G something
100036516|F|0--15:T>G something
100036516|F|0-15:T>G-15:T>G something