Selecione cada duas linhas se elas começarem com o mesmo nome

0

Eu tenho uma tabela assim:

     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 
           ...                         ....

Eu adicionei os números de linha para facilitar a minha pergunta. Existem alguns pares de linhas que começam com o mesmo número, como linhas 2 e 3, 4 e 5, 7 e 8. Há também linhas que são exclusivas como as linhas 1 e 6. Eu gostaria de conservar apenas as linhas que têm um par ou em outras palavras, elimine linhas que não tenham um par para ter uma tabela como esta:

     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 
           ...                         ....

Eu quero algo como o oposto do comando linux uniq levando em consideração apenas os números da primeira coluna e não o resto depois do simbol | .

Você sabe como fazer isso?

Abaixo está a mesma primeira tabela com as colunas separadas por um espaço e sem cabeçalho para facilitar a cópia.

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 
    
por Eric González 14.09.2017 / 06:19

1 resposta

2

essa é uma solução awk , que mantém as linhas onde elas são repetidas mais de uma vez. Se você quiser aquelas que são repetidas exatamente duas vezes, altere >1 para ==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
    
por 14.09.2017 / 06:47