両方の行が同じ名前で始まる場合は、その行を選択してください。

両方の行が同じ名前で始まる場合は、その行を選択してください。

次の表があります。

     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。行を2回だけ繰り返すには、次のよう>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

関連情報