我有一个非常不整洁的CSV文件,;
作为字段分隔符。在字段1中,我有一个名称,在字段3或4中有地址详细信息,以逗号分隔,带有未指定数量的条目,主要包括电子邮件地址。所以它看起来像这样:
Doe, Jon; Some information ; some more information; di: address details, p: (01234) 56789, F: 252470, info@my-domain.com
Miller, Mariella; Some information ; di: other address, p: (09876) 54321, mailme@the-millers.com
Brown, Sam; Other information ; di: other address with no e-mail, p: (09876) 54321
我想从文件中提取电子邮件地址以及名称。我可以用
获取名字BEGIN {FS = ";"}
/@/ {print $1}
我可以通过这个漂亮的grep找到电子邮件地址:
grep -i -o "[A-Z0-9._%+-]\+@[A-Z0-9.-]\+\.[A-Z]\{2,4\}" mylist.csv
我希望在行中有@
时调用grep,从而产生如下输出:
Doe, Jon, info@my-domain.com
Miller, Mariella, mailme@the-millers.com
但我不知道如何从awk调用grep。
答案 0 :(得分:2)
您可以使用gawk
:
$ gawk -F\; 'match($0, /(\w+@[^@]+.)/, a){print $1", "a[1]}' file
Doe, Jon, info@my-domain.com
Miller, Mariella, mailme@the-millers.com
如果regexp包含括号,则为数组的整数索引元素 被设置为包含匹配对应的字符串部分 带括号的子表达式。
<强>解释强>
match($0, /(\w+@[^@]+.)/, a)
将以两种方式为我们提供,匹配功能只有在正则表达式 em>捕获邮件地址,然后我们进入 print 部分以显示最终结果。
答案 1 :(得分:0)
使用awk你可以这样做:
awk -F ';' '$NF ~ /@/{sub(/ *$/, "", $NF); sub(/.* /, "", $NF); print $1 ",", $NF}' file
Doe, Jon, info@my-domain.com
Miller, Mariella, mailme@the-millers.com