【发布时间】:2020-06-05 04:37:02
【问题描述】:
尝试使用 awk 搜索文件中的特定行,如果匹配,则在打印每一行后写入“匹配”。
例如,如果我有一个包含姓名和电子邮件列表的文件,但我只想匹配以“@yahoo.com”结尾的电子邮件,我希望它打印出最后带有“matched”的那一行,并且如果该行不包含@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,然后打印其他行,不管他们的电子邮件地址是什么。我错过了什么?
【问题讨论】:
-
在请求帮助编写脚本来解析文件内容时,最重要的是向我们展示文件的内容。到目前为止,您已经向我们展示了您运行的脚本及其产生的输出 - 添加您运行它的输入文件,以便我们可以帮助您找出您的脚本出错的地方。还要添加预期的输出,因为是否要打印不匹配的行并不完全清楚。文本听起来像您没有,但是您的脚本确实如此,如果输出中只有匹配的行,为什么还要添加“匹配”。因此,请向我们展示示例输入和预期输出。
-
您测试第三个字段(逗号分隔符)。我假设“Sally Sue”记录有任何与逗号相关的问题。最好的是,您在此处提供文件
emails.txt以供进一步分析。