awk help para impressão de uma coluna em particular até o final

1

Eu tenho um arquivo como este

gene    -   chr7    55675   55676   100 100
gene    -   chr7    55678   55679   100 100
gene    -   chr7    55683   55686   NP  100

O arquivo é separado por tabulações.

Eu quero mudar o arquivo de tal forma que a coluna 5 deve estar na coluna 4 e coluna 4 na coluna 5 e depois de imprimir todas as colunas como está. Estou mostrando apenas 2 colunas depois da quinta coluna, mas pode haver muito mais.

Eu tentei cut -f 1,2,3,5,4,6- , mas não funciona.

Eu preferiria uma solução awk para isso.

Obrigado

    
por user3138373 14.09.2016 / 21:14

1 resposta

8

Para trocar os campos 4 e 5:

$ awk -F'\t' '{a=$4; $4=$5; $5=a;} 1' OFS='\t' file
gene    -       chr7    55676   55675   100     100
gene    -       chr7    55679   55678   100     100
gene    -       chr7    55686   55683   NP      100

Como funciona:

  • -F'\t'

    Isso define o separador de campo na entrada para uma guia.

  • a=$4; $4=$5; $5=a

    Isso troca o quarto e quinto campos.

  • 1

    Esta é uma abreviada enigmática do awk para imprimir a linha.

  • OFS='\t'

    Isto diz ao awk para usar uma aba como o separador de campo na saída.

Deixando o cabeçalho inalterado

Para trocar os campos em todas as linhas, exceto a primeira:

awk -F'\t' -v OFS='\t' 'NR>1{a=$4; $4=$5; $5=a;} 1' file

NR é o número da linha. O NR>1 colocado antes dos comandos de troca é uma condição. Os comandos de troca serão executados apenas se a condição for verdadeira.

Estilo alternativo

Alguns estilistas recomendam que a atribuição ao OFS seja anterior ao código:

awk -F'\t' -v OFS='\t' '{a=$4; $4=$5; $5=a;} 1' file
    
por 14.09.2016 / 21:22

Tags