Awk 根据某些条件交换列
我有一个5列的文本文件。如果第5列的编号小于第3列,则将第4列和第5列替换为第2列和第3列。如果第5列的数字大于第3列,则该行保持不变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
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