用于显示两个文本文件之间差异的 Bash 脚本

用于显示两个文本文件之间差异的 Bash 脚本

假设我有两个列表:

guests-2016.txt

Peter
Michael
Frank
Dirk

guests-2017.txt

Mark
Michael
Dirk
Lilly

我如何创建两个新的宾客名单

  1. 曾在guests-2016.txt但不在guests-2017.txt( former_guests.txt)的客人

  2. 之前不在guests-2016.txt但现在在的客人guests-2017.txt( new_guests.txt)

应忽略空白行。只能使用标准实用程序。

我的想法是使用diff并进行一些后期处理。

答案1

给定两个已排序文件,comm将为您执行此操作。

例如,请参阅-2 -3和命令行选项的组合。-1 -3

答案2

检查一下,它是否能完成工作。如果您需要的话,我可以添加解释。

awk '
/^$/{next}
FNR == NR {guest_2016[$1] = 1}
FNR != NR {
    if(!guest_2016[$1])
        print $1 > "new_guests.txt" 
    delete guest_2016[$1];
}
END {
    for(i in guest_2016)
        print i > "former_guests.txt"
}' guests-2016.txt guests-2017.txt

相关内容