从较新的文本文件中减去较旧的文本文件

从较新的文本文件中减去较旧的文本文件

如何从新文件中删除旧文件副本的内容?

例如:

给定一个邮件文件,复制该邮件文件并在副本上完成工作。在工作过程中,原始邮件文件的大小会增加。如何从新文件中删除旧文件中存储的旧邮件。

我想您可以计算行数并从新文件的顶部删除该行数?有没有办法在 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打印。fileNUM_LINE

mailfile1要删除将mailfile2结果保存到的行数mailfile2.new

tail -n+$(( $(wc -l <mailfile1) + 1)) mailfile2 > mailfile2.new
  • wc -l <mailfile1打印行数mailfile1
  • $(( $(wc -l <mailfile1) + 1))mailfile1打印+ 1的行数

相关内容