awk print "matched" после успешного совпадения - PullRequest
0 голосов
/ 20 февраля 2020

Попытка использовать awk для поиска файла по заданным c строкам и записи «совпало» после печати каждой строки, если она совпадает.

Например, если у меня есть файл, который содержит список имен и адресов электронной почты, но я хочу сопоставлять только письма, заканчивающиеся на "@ yahoo.com", я хочу, чтобы он распечатал эту строку со словом "совпал" в конец и если строка НЕ ​​содержит @ yahoo.com, я просто хочу, чтобы она распечатала эту строку и продолжила.

awk -F, '{if($3~/yahoo.com/){ print $1,$2,$3 " matched"}else{ print $1,$2,$3 }}' emails.txt

Это возвращает:

Joe Smith joe.smith@yahoo.com matched
John Doe john.doe@gmail.com 
Sally Sue sally.sue@yahoo.com`

Так что это только сопоставляя первый @ yahoo.com, затем печатая другие строки независимо от их адреса электронной почты. Чего мне не хватает?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2020

Не могли бы вы попробовать следующее.

awk '/@yahoo\.com/{print $0,"matched"}' Input_file

Объяснение: В указанном вами примере файла Input_file не было запятой, поэтому удалил часть разделителя полей из него.

Также имя человека может иметь более 2 полей, поэтому я не сопоставляю 3-е поле с условием, скорее, я проверяю условие на всей строке.

2 голосов
/ 20 февраля 2020

Это, вероятно, то, что вы хотите:

awk -F, '{print $0 ($NF ~ /@yahoo\.com$/ ? " matched" : "")}' emails.txt

, но без просмотра входного файла это просто непроверенное предположение.

1 голос
/ 20 февраля 2020

Я протестировал пример со следующим вводом: данный разделитель файла, в вашем примере и после разделения вы можете получить доступ к записи $ 3 (электронная почта) и соответствовать вашему условию.

Ввод:

Joe,Smith,joe.smith@yahoo.com
John,Doe,john.doe@gmail.com
Sally,Sue,sally.sue@yahoo.com```

Сценарий

awk -F, '{if($3~/yahoo.com/){ print $1,$2,$3 " matched"}else{ print $1,$2,$3 }}' emails.txt

Вывод:

Joe Smith joe.smith@yahoo.com matched
John Doe john.doe@gmail.com 
Sally Sue sally.sue@yahoo.com matched
0 голосов
/ 20 февраля 2020

Если строка оканчивается на @yahoo.com, переназначьте всю строку на себя, а затем на строку matched.

awk '/@yahoo.com$/{$0=$0 " matched"}1' input

Joe Smith joe.smith@yahoo.com matched
John Doe john.doe@gmail.com
Sally Sue sally.sue@yahoo.com matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...