AWK - 打印某些行但不进行处理

AWK - 打印某些行但不进行处理

如果我有一个以下格式的文件:

line1 column1
line2 columnA
line3 column1A
exclude this
line5 column2
line6 columnB
line7 column2B

我想交换列,因此column*会在 之前打印line*。我使用awk这样的简单命令:awk '{print $2 " " $1}'并得到如下输出:

column1 line1
columnA line2
column1A line3
this exclude
column2 line1
columnB line2
column2B line3

现在我希望打印该行exclude但不重新排序(它不一定是第 3 行)。我可以使用此命令忽略这些行:awk '/exclude/{next}{print $2 " " $1}'并且我得到一个没有排除行的输出:

column1 line1
columnA line2
column1A line3
column2 line1
columnB line2
column2B line3

我如何知道awk打印包含exclude但不重新排列列的行?所以我会得到这样的输出:

column1 line1
columnA line2
column1A line3
exclude this
column2 line1
columnB line2
column2B line3

答案1

就像是

awk '{if(/exclude/){print}else{print $2,$1}}' file.txt

或者,相同的结果,但更短一些。

awk '!/exclude/{$0=$2FS$1}1' file.txt

相关内容