filter baseado em um valor de campo no awk

2

Eu quero imprimir os países que têm to após ~: .

welcome~:to~:Germany
welcome~:no please~:Italy
welcome~:to~:Brazil
welcome~:not ok~:China

Observação: não sei o que estará lá, além de " to ". Pode ser qualquer coisa e pode ser alterado (como no please , not ok ).

Eu estou tentando usar o cut, awk, sed. Mas eu sou incapaz de descobrir.

awk -F "~:" '{print $2 $NF}'

Mas eu recebo a saída como:

toGermany
no pleaseItaly
toBrazil
not okChina

Como filtrar países que não sejam to .

ATUALIZAÇÃO:

Solução alternativa: (Figurado com corte): -)

grep -v "to" |cut -d ':' -f3 
    
por Kasino 13.08.2015 / 21:02

2 respostas

3

Como você está usando ~: como separador de campo, você pode verificar se o segundo campo é igual a to e imprimir o terceiro campo que é o país:

awk -F"~:" '$2 == "to" { print $3; }' file

Resultado:

Germany
Brazil
    
por 13.08.2015 / 21:10
2

Não se esqueça de sed solution:

sed -n '/~:to~:/s/.*://p'

ou mais qiuck (pode ser)

sed '/~:/{s/to~:/\n/;D}'
    
por 13.08.2015 / 22:04