生生不息

生生不息

Linux系统去除文本文件重复行(qq邮箱发邮件处理前)

2024-10-01
Linux系统去除文本文件重复行(qq邮箱发邮件处理前)

背景

我们存在一个已发送的文件列表(每行都是一个qq邮箱),

一个垃圾的文件列表,包括发不出去的垃圾邮箱,可能由于对方没有开通qq邮箱等。

再加上此次需要的qq邮箱(1287)。

如何通过去重复得到此次实际需要发送的邮箱号列表,即不和之前的重复,1287个中去除已发送,去除垃圾后得到的文件。

解决方案

1.存放1287行qq号于word,保存编码为utf-8,文件名1.txt,
gab.txt 垃圾文件1032个
sended.txt 已发送8932个

2.去除本身的重复2.txt
命令:sort 1.txt| uniq > 2.txt
1286个

3.添加后缀为文件3.txt
命令:awk '{print $0 "@qq.com"}' 2.txt > 3.txt
这时vi 3.txt可以看到有^M标记,这是由于win和linux系统的编码不同导致
可以做替换
vi 3.txt
:%s/^M//g 去掉所有的^M标记,注意需要使用CTRL -V CTRL -M打出来,不能直接打出来
1286 substitutions on 1286 lines 删除完毕
:wq保存退出

4.与已发送的交集文件
sort sended.txt 3.txt | uniq -d > 4.txt
184个
去除
sort 3.txt 4.txt 4.txt | uniq -u > 5.txt
1102个

5.与垃圾的交集文件
sort 5.txt gab.txt | uniq -d > 6.txt
54个
去除
sort 5.txt 6.txt 6.txt | uniq -u > 7.txt
1048个

6.梳理
最初的1287,重复1个,已发送184个,垃圾54个
1287-1-184-54=1048个
完美解决。