Awk 根据某些条件交换列

Awk 根据某些条件交换列,awk,Awk,我有一个5列的文本文件。如果第5列的编号小于第3列,则将第4列和第5列替换为第2列和第3列。如果第5列的数字大于第3列,则该行保持不变 1EAD A 396 B 311 1F3B A 118 B 171 1F5V A 179 B 171 1G73 A 162 C 121 1BS0 E 138 G 230 期望输出 1EAD B 311 A 396 1F3B A 118 B 171 1F5V

我有一个5列的文本文件。如果第5列的编号小于第3列,则将第4列和第5列替换为第2列和第3列。如果第5列的数字大于第3列,则该行保持不变

1EAD    A   396 B   311
1F3B    A   118 B   171
1F5V    A   179 B   171
1G73    A   162 C   121
1BS0    E   138 G   230
期望输出

1EAD    B   311 A   396
1F3B    A   118 B   171
1F5V    B   171 A   179
1G73    C   121 A   162
1BS0    E   138 G   230

如果它们相等怎么办?这假设输入是以制表符分隔的。您可以将其缩短一些,并获得如下更好的打印输出:
awk'$5>=$3{$1=$1;print;next}{print$1,$4,$5,$2,$3}'OFS=“\t”file
或只替换字段
awk'$3>$5{x=$5;$5=$3;$3=x}1'OFS=“\t”file
,这似乎不会交换其他两列。在任何情况下,我认为我的答案是相当可读的,和其他答案一样简短。
$ awk '{ if ($5 >= $3) print $0; else print $1"\t"$4"\t"$5"\t"$2"\t"$3; }' foo.txt