Remove linhas que contêm cadeias duplicadas entre os primeiros 4 caracteres de duas colunas

0

Eu tenho um arquivo grande que contém 4 colunas e 7.000 linhas. Eu preciso remover as linhas em que o início da segunda coluna é o mesmo que o início para a quarta coluna.

Entrada:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus18   AATTCCATTATGG   Gator_locus14   AATTCAAAAAAT
Gator_locus13   CTAGAACCCACC    Gator_locus72   CTAGAATGTATG
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

Saída:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

Eu preciso remover as linhas nas quais a string da segunda coluna inicia "AATT" e a string na mesma linha da quarta coluna inicia "AATT". Eu também preciso fazer a mesma coisa quando a string na segunda coluna iniciar "CTAG" e a string na quarta coluna iniciar "CTAG".

    
por Josh 12.02.2018 / 21:10

2 respostas

2

Para imprimir linhas nas quais os 4 primeiros caracteres da coluna 2 não são iguais aos 4 primeiros caracteres da coluna 4:

awk 'substr($2, 1, 4) != substr($4, 1, 4)' < input

Isso usa o código principal como um "teste" para ver se uma linha deve ser impressa; não há seção de ação explícita, já que a ação de impressão padrão é o que queremos. O código principal simplesmente extrai os quatro primeiros caracteres de cada coluna e compara-os.

    
por 12.02.2018 / 21:38
0

Para remover linhas nas quais o segundo campo começa com AATT e o quarto campo começa com AATT e o mesmo com CATG :

awk '($2 !~ /^AATT/ && $4 !~ /^AATT/) && ($2 !~ /^CTAG/ && $4 !~ /^CTAG/) {print}' /path/to/file

Como uma solução mais geral:

awk 'substr($2,1,4) != substr($4,1,4) {print}' /path/to/file
    
por 12.02.2018 / 21:38