Se col 2 tiver q então imprima o val em col 1 e se col 2 não tiver q então imprima o mesmo val em col 2

0
A01_106367192   A01_106367192
A01_106359962   A01_106359962
A01_106106644   A01_106106656
A01_106045906   A01_106045909
A01_105865211   A01_105865216
A01_105877866   q
B01_114451441   q
A01_105801529   A01_105801532
A01_105803107   A01_105803079
A01_105803074   A01_105803079
A01_105061789   A01_105061763
A01_105408577   A01_105408577
A01_104975080   A01_104975074
A01_104994687   A01_104994690
A01_104983310   q
A01_104542183   A01_104542186
A01_104652672   q
A01_104652685   A01_104652679
A01_105006416   A01_105006421
A01_105136838   A01_105136837
A01_104359686   q
A01_104359660   A01_104359665

awk '{if ($2 == q) print $1; else print$2 }' input_file |less

Retorna col 2 como é.

    
por Gavin 18.10.2017 / 23:04

2 respostas

1

Seu código:

awk '{if ($2 == q) print $1; else print$2 }' input_file

Isso imprimirá $1 se $2 for igual à awk variable q . Essa variável não é inicializada, portanto, o teste provavelmente nunca será verdadeiro, a menos que você defina q como a sequência "q" na linha de comando:

 awk -vq="q" '{if ($2 == q) print $1; else print $2 }'

O que você provavelmente quer é comparar com "q" no próprio código:

awk '{if ($2 == "q") print $1; else print $2 }' input_file

Ou, de uma maneira mais idiomática de dizer a mesma coisa:

awk '$2 == "q" { print $1 } $2 != "q" { print $2 }'

ou

awk '$2 == "q" { print $1; next } { print $2 }'

ou, como mostra a solução da RomanPerekhrest , usando o operador ternário ?: .

    
por 18.10.2017 / 23:16
1

Abordagem curta awk :

awk '{ print ($2=="q"? $1:$2) }' file
  • $2=="q"? $1:$2 - condição ternária, significa: se a expressão $2=="q é avaliada como true - imprima o operando à esquerda $1 , caso contrário - imprima o operando à direita $2

A saída:

A01_106367192
A01_106359962
A01_106106656
A01_106045909
A01_105865216
A01_105877866
B01_114451441
A01_105801532
A01_105803079
A01_105803079
A01_105061763
A01_105408577
A01_104975074
A01_104994690
A01_104983310
A01_104542186
A01_104652672
A01_104652679
A01_105006421
A01_105136837
A01_104359686
A01_104359665
    
por 18.10.2017 / 23:16

Tags