Как я могу напечатать определенное поле с выражением с помощью awk -F?

Я пытаюсь распечатать только адреса электронной почты из файла, формат файла следующий:

{"12":"34","email":"johnsmith@gmail.com","firstname":"john","lastname":"smith","text":"0","sig":"js","..":"2017-08-23"}

Как я могу просто извлечь с помощью awk -F? Поэтому я могу использовать awk -F '"' '{print $ 8}', но восьмой столбец не всегда может быть адресом электронной почты.

Есть ли способ использовать awk -F С регулярным выражением '@' ? Или распечатайте все тексты в разделителе отдельными строками, а затем передайте их по конвейеру | grep '@'

Спасибо

0
23.08.2017, 14:18
3 ответа

Это awkспособ.

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

Вышеупомянутое верно, когда вы заключаете поля в кавычки, иначе у вас должен быть RS с несколькими RecordSeperators. как RS='[[:blank:]]*:'по вашему образцу в вашем комментарии.

0
28.01.2020, 02:45

jq— подходящий инструмент для анализа/манипулирования данными json:

jq '.email' jsonfile

Выход:

"johnsmith@gmail.com"
1
28.01.2020, 02:45

Регистр -ex может нуждаться в настройке для полного соответствия RFC 5322, но для начала попробуйте:

awk '{match($0,"[a-zA-z0-9._%+-]+@[a-zA-z0-9._%+-]",a)}END{print a[0]}'
0
28.01.2020, 02:45

Теги

Похожие вопросы