subconjunto de um arquivo para cromossomos corretos

0

Eu tenho um arquivo de entrada, alguns de seus conteúdos estão abaixo

chr1    12227   12612
chr1_ett    12721   13220
chr1    14829   14969
chr2    15038   15795
chr2_tdr    15947   16606
chr1    16765   16857
chr1    17055   17232
chr1    17368   17605
chr3    17742   17914
chr3_urr    18061   18267

Eu quero remover as linhas que têm "_" (sublinhado) na primeira coluna. Então, basicamente, manter chr1, chr2, chr3 apenas e não chr1_ chr2_ chr3_ etc Os cromossomos vão de chr1 a chr22 e têm chrX chrY e chrM.

Como posso fazer isso?

Obrigado

    
por user3138373 28.09.2017 / 19:09

4 respostas

4

tente

awk '$1 !~ /_/' input_file.txt > output.txt

isso selecionará todas as linhas em que $1 (primeira coluna) não contém _

ou, de acordo com Glenn Jackmann, sugestão

awk '! index($1,"_") ' input_file.txt > output.txt

outro caminho pode ser

sed -i -e '/^chr[0-9]*_/d' file.txt

isto apagará a mesma linha. (desde linha começar exatamente com chr )

    
por 28.09.2017 / 19:17
2
sed '/_/d' file

excluirá todas as linhas onde o sublinhado aparecer em qualquer lugar na linha .

Se você precisar salvar os resultados no arquivo, use sed -i ...

Para restringir a primeira coluna:

sed '/^[[:blank:]]*[^[:blank:]]\+_/d' file

Ou seja: no início da linha, opcionalmente, espaços iniciais, seguidos por caracteres não espaciais e um sublinhado.

    
por 28.09.2017 / 19:17
1

Solução de Perl:

perl -ane 'print unless $F[0] =~ /_/' < input > output
    
por 28.09.2017 / 19:20
1

Ou com grep :

grep -v "_" file

-v, --invert-match Inverte o sentido da correspondência para selecionar linhas não correspondentes.

Para excluir a linha se apenas "_" na primeira coluna:

grep -v "^chr[0-9]_" file
    
por 28.09.2017 / 19:19