如何从新文件中删除旧文件副本的内容?
例如:
给定一个邮件文件,复制该邮件文件并在副本上完成工作。在工作过程中,原始邮件文件的大小会增加。如何从新文件中删除旧文件中存储的旧邮件。
我想您可以计算行数并从新文件的顶部删除该行数?有没有办法在 bash 中轻松做到这一点?
谢谢。
答案1
假设您的文件格式相同(在 Linux 上,这必须包括大写),例如每行一个电子邮件地址,comm
将执行您想要的操作:
$ cat old <(echo '--') new
[email protected]
[email protected]
[email protected]
[email protected]
--
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
$ comm -i13 <(sort old) <(sort new)
[email protected]
[email protected]
[email protected]
选项-13
告诉comm
它不显示仅在old
( -1
) 中的地址,并且不显示两个文件 ( -3
) 中的地址。因此,输出仅显示找到的地址仅有的在new
。
如果您使用的是 BSD,并且您的文件尚未针对字母大小写进行规范化,则可以添加comm
's开关来执行不区分大小写的匹配。-i
答案2
您可以使用从第 行开始tail -n+<NUM_LINE> file
打印。file
NUM_LINE
mailfile1
要删除将mailfile2
结果保存到的行数mailfile2.new
:
tail -n+$(( $(wc -l <mailfile1) + 1)) mailfile2 > mailfile2.new
wc -l <mailfile1
打印行数mailfile1
$(( $(wc -l <mailfile1) + 1))
mailfile1
打印+ 1的行数