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の入力値に依存するため、フィールド番号も比較できる場合は操作を実行する必要があります)

x = ABCのときに予想される出力

DEF  456

x=DEFの場合

ABC 123

そして各行ごとに...

答え1

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

@don_crissti うまくいったようです。

関連情報