繁体   English   中英

匹配成功后 awk 打印“匹配”

[英]awk print "matched" after successful match

尝试使用 awk 在文件中搜索特定行并在打印每一行后写入“匹配”(如果匹配)。

例如,如果我有一个包含姓名和电子邮件列表的文件,但我只想匹配以“@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,然后不管他们的电子邮件地址如何打印其他行。 我错过了什么?

你能不能试试以下。

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

说明:您显示的示例 Input_file 没有逗号,因此从中删除了字段分隔符部分。

另外一个人的名字可以有 2 个以上的字段,所以我没有匹配第三个字段的条件,而是我在这里检查整行的条件。

这可能是你想要的:

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

但没有看到您的输入文件,这只是一个未经测试的猜测。

我使用以下输入测试了示例:给出的文件分隔符是,在您的示例中,在拆分后,您可以访问 $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

如果该行以@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM