Como posso imprimir um campo específico com uma expressão usando awk -F?

0

Estou tentando imprimir apenas endereços de e-mail de um arquivo, o formato de arquivo é o seguinte:

{"12":"34","email":"[email protected]","firstname":"john","lastname":"smith","text":"0","sig":"js","..":"2017-08-23"}

Como posso apenas extrair usando awk -F? Então eu posso usar o awk -F '"' '{print $ 8}', mas a 8ª coluna nem sempre é o endereço de e-mail.

Existe uma maneira de usar o awk -F COM uma expressão regular de '@'? Ou imprima todos os textos no delimitador em linhas separadas e, em seguida, canalize-o para | grep '@'

Obrigado

    
por psd360 23.08.2017 / 13:18

3 respostas

0

Esta é uma maneira awk .

awk -v RS=\" '/@/' infile.txt 

Os itens acima estão corretos quando você cita campos, senão você deve ter RS com vários RecordSeperators. como RS='[[:blank:]]*:' por sua amostra no seu comentário.

    
por 23.08.2017 / 13:41
1

jq é adequado ferramenta para analisar / manipular dados json:

jq '.email' jsonfile

A saída:

"[email protected]"
    
por 23.08.2017 / 13:42
0

O reg-ex pode precisar de ajustes para ser totalmente compatível com o RFC 5322, mas como um iniciador, tente:

awk '{match($0,"[a-zA-z0-9._%+-]+@[a-zA-z0-9._%+-]",a)}END{print a[0]}'
    
por 23.08.2017 / 13:51

Tags