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

nat*_*ath 3 awk text-processing text-formatting

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

line1 column1
line2 columnA
line3 column1A
exclude this
line5 column2
line6 columnB
line7 column2B
Run Code Online (Sandbox Code Playgroud)

我想交换列,所以column*line*. 我使用这样一个简单的awk命令:awk '{print $2 " " $1}'并得到这样的输出:

column1 line1
columnA line2
column1A line3
this exclude
column2 line1
columnB line2
column2B line3
Run Code Online (Sandbox Code Playgroud)

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

column1 line1
columnA line2
column1A line3
column2 line1
columnB line2
column2B line3
Run Code Online (Sandbox Code Playgroud)

我怎么知道awk打印那些包含exclude但不使用列的行?所以我会得到这样的输出:

column1 line1
columnA line2
column1A line3
exclude this
column2 line1
columnB line2
column2B line3
Run Code Online (Sandbox Code Playgroud)

ste*_*eve 8

就像是

awk '{if(/exclude/){print}else{print $2,$1}}' file.txt
Run Code Online (Sandbox Code Playgroud)

或者,同样的结果,但更短一点。

awk '!/exclude/{$0=$2FS$1}1' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 呃,这看起来真的很浓缩。出于教学目的,您应该用空格分隔标记,以使代码更易于阅读。 (2认同)