Чтобы поменять местами поля 4 и 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
Как это работает:
-F'\t'
Это устанавливает разделитель полей при вводе на табуляцию.
a=$4; $4=$5; $5=a
Это меняет местами четвертое и пятое поля.
1
Это загадочное сокращение awk для печати строки.
OFS='\t'
Это указывает awk на использование табуляции в качестве разделителя полей при выводе.
Чтобы поменять местами поля во всех строках, кроме первой:
awk -F'\t' -v OFS='\t' 'NR>1{a=$4; $4=$5; $5=a;} 1' file
NR
- номер строки. NR>1
, расположенный перед командами замены, является условием. Команды замены будут выполняться только в том случае, если условие истинно.
Некоторые стилисты рекомендуют, чтобы назначение OFS находилось перед кодом:
awk -F'\t' -v OFS='\t' '{a=$4; $4=$5; $5=a;} 1' file