Remover linha do arquivo

1

Eu tenho dados de 4 colunas, 10000 linhas. Eu estou tentando remover linhas cuja segunda coluna tem valores menores que a terceira coluna das linhas anteriores.

chr1        10        20        3 
chr1        15        30        9 
chr1        55        60        1

Eu sou totalmente novo no awk. E qualquer ajuda será apreciada.

    
por PDM 14.02.2018 / 03:17

1 resposta

3
awk '$2 >= prev; {prev=$3}' file.txt

Explicação

  • awk <commands> file.txt : execute o awk em file.txt .
  • $2 >= prev : verifique se o segundo campo $2 é maior ou igual ao conteúdo da variável prev . (Isso não é definido para a primeira linha.) Se isso for verdade, o awk usa como padrão a impressão da linha inteira. (ou seja, se for menor, exclua a linha).
  • {prev=$3} : armazena o conteúdo do terceiro campo $3 na variável prev .

Isso então se repete para a próxima linha. O awk irá comparar o segundo campo com prev , que agora contém o terceiro campo da linha anterior. Algumas coisas a serem observadas:

  • Não tenho certeza do que você queria para a primeira linha, por isso, basta incluí-la / excluí-la manualmente como quiser.
  • Se os dados forem realmente delimitados por tabulações, basta adicionar o seguinte sinalizador ao awk para que ele saiba: -F'\t' .
por 14.02.2018 / 03:59

Tags