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