如何从电子邮件地址中提取域名并将其添加到管道分隔文件中的新列中?

如何从电子邮件地址中提取域名并将其添加到管道分隔文件中的新列中?

我有一个用竖线分隔的文件,第三列中有一个电子邮件地址。我需要帮助使用 awk 或 sed 命令从第三列中的电子邮件地址的域名中创建第四列。

输入文件

TEST|1234|[email protected]
TEST|4533|[email protected]
TEST|9030|[email protected]
TEST|0903|[email protected]

预期产出

TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com

答案1

尝试这个,

awk -F '@' '{print $0"|"$NF}' file

TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com

答案2

使用sed

$ sed 's/@\(.*\)/&|\1/' file
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com

这将匹配@每行的第一个字符,并使用捕获组捕获其后的所有内容。匹配的文本将被自身替换,后跟捕获的文本,|中间有一个字符。

如果您的文件是 DOS 文本文件(如某些评论所示),那么您可以使用同一个命令将其转换为 Unix 文本文件:

$ sed -e 's/[[:cntrl:]]$//' -e 's/@\(.*\)/&|\1/' file
TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com

第二次替换与之前相同,但第一次替换将删除行末尾的任何控制字符(这将删除每行末尾的回车符,如果有的话)。无论原始文件是 DOS 还是 Unix 文本文件,最后一个命令的输出都将是 Unix 文本文档。

答案3

尝试使用下面的脚本

for i in `cat o.txt`; do y=`echo $i |awk -F "|" '{print $NF}'| awk -F "@" '{print $NF}'`; echo $i | awk -v y="$y"  '{print $0"|"y}'; done

输出

TEST|1234|[email protected]|gmail.com
TEST|4533|[email protected]|yahoo.com
TEST|9030|[email protected]|gmx.com
TEST|0903|[email protected]|gmail.com

相关内容