如果每两行以相同名称开头,则选择它们

如果每两行以相同名称开头,则选择它们

我有一个看起来像这样的表:

     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

相关内容