如果我有一个以下格式的文件:
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