awk 当特定列上的模式匹配时打印列数据

awk 当特定列上的模式匹配时打印列数据

我有输入文件

ABC 123      DEF  456
ZYX 098      WVU  765
PQR 111      RST  333

现在我尝试如果模式在第 1 列中匹配则显示第 3 列和第 4 列,如果模式在第 1 列中匹配则显示第 1 列和第 2 列。

awk '{{for(i=1;i<=NF;i++)if($i == "ABC") printf $(i+2)" "$(i+3)" "} print ""; }'

这完成了工作,但输入将是一个变量,所以我不知道它是否会匹配第 1 列或第 3 列。

x=ABC or x=DEF 
awk -v x="$x" '{{for(i=1;i<=NF;i++)if($i==x) printf $(i+2)" "$(i+3)" "} print ""; }' 

(取决于 x 的输入值,所以如果我也可以比较 Field no ,它应该可以完成这项工作)

x=ABC 时的预期输出

DEF  456

如果 x=DEF

ABC 123

每行依此类推......

答案1

awk -vx="$x" '$1 == x {print $3, $4} $3 == x {print $1, $2}'

@don_crissti 这似乎做得很好。

相关内容