awk para imprimir uma coluna de dados quando o padrão corresponde a uma determinada coluna

0

Eu tenho arquivo de entrada

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

Agora estou tentando exibir a 3ª e a 4ª coluna se o padrão corresponder à coluna 1 e exibir a primeira e a segunda coluna se o padrão corresponder na terceira coluna.

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

Isso faz o trabalho, mas a entrada será uma variável como em, portanto, não sei se corresponderá à coluna 1 ou coluna 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 ""; }' 

(Dependendo do valor de entrada de x, então, se eu puder comparar o Field no, ele deve fazer o trabalho)

Saída esperada se x = ABC

DEF  456

se x = DEF

ABC 123

E assim por diante para cada linha ....

    
por Sid 02.03.2017 / 13:22

1 resposta

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

@don_crissti Isso parece fazer o trabalho muito bem.

    
por 09.03.2017 / 11:38

Tags