awk,第4列所有匹配的通配符在@

awk,第4列所有匹配的通配符在@,awk,Awk,我试图从pmta邮件日志中提取数据 单个条目如下所示 b,2013-02-04 03:48:57+0200,2013-02-04 03:48:57+0200,noreply@test.com,fynnb@domain.com,rfc822;fynnb@domain.com,failed,5.3.2 (system not accepting network messages),smtp;550 Too many invalid recipients,mx02.domain.com (146.23

我试图从pmta邮件日志中提取数据

单个条目如下所示

b,2013-02-04 03:48:57+0200,2013-02-04 03:48:57+0200,noreply@test.com,fynnb@domain.com,rfc822;fynnb@domain.com,failed,5.3.2 (system not accepting network messages),smtp;550 Too many invalid recipients,mx02.domain.com (146.230.128.12),other,smtp,twww01.test.com(10.0.0.53),,143.37.222.256,146.230.128.12,,,virtmail23,,,domain.com/virtmail23,test-promo,,,,,,,,,,,
有很多条目,我只想把第三个逗号后面有“*@test.com”的条目拉出来

目前noreply@test.com在示例中,但我们使用noreply、noreply、No Reply和user,因此我希望在@符号之前使用通配符

到目前为止,我得到的是

awk -F, '$4 == "noreply@test.com"' /home/mail/test.csv
它可以很好地提取包含“noreply@test.com“但是如果我使用

awk -F, '$4 == "*@test.com"' /home/mail/test.csv
我没有数据。
在此senario中,我可以在awk中使用什么?

您需要告诉awk执行重新比较(~)而不是字符串比较(=):

“*”表示“前一个RE子组的零次或多次重复”,当用于RE中的某个内容之后时,但当用于RE开头时,表示文字“*”字符。您可能是指“*@test.com”(其中“*”表示任何字符的零次或多次重复),但如果您仔细想想,这与“@test.com”完全相同。
awk -F, '$4 ~ /@test\.com/' /home/mail/test.csv