Linux bash SORT按姓氏在电子邮件地址



试图找到一种方法(单行命令)排序1500+电子邮件地址的文本文件按姓氏在实际地址。但是姓氏可以是第二个或第三个字段,并且总是在@之前。例如:

b.ggggg@domain.com
c.aaaaa@domain.com
r.b.kkkkk@domain.com
e.z.ddddd@domain.com
g.ccccc@domain.com
l.ttttt@domain.com

应该排序到

c.aaaaa@domain.com
g.ccccc@domain.com
e.z.ddddd@domain.com
b.ggggg@domain.com
r.b.kkkkk@domain.com
l.ttttt@domain.com

我使用cat list.txt | sort -t . -k2,但我知道这是错误的。谢谢你的建议

将姓氏提取到自己的字段中,按该字段排序,然后删除。

sed 's/.*.([^.]*)@/1 &/' input.txt | sort -k 1,1 | cut -d' ' -f2- > output.txt

sed将姓氏复制到行首的字段。sort按第一个字段排序。然后cut移除第一个字段。

这是我的答案

$ cat emails.txt | sed -E 's/@/D@/' | sed -E 's/.([a-z]+D@)/.D1/' | sort -tD -k2,2 | tr -d 'D'
c.aaaaa@domain.com
g.ccccc@domain.com
e.z.ddddd@domain.com
b.ggggg@domain.com
r.b.kkkkk@domain.com
l.ttttt@domain.com

最新更新