web-dev-qa-db-ja.com

2つのテキストファイルの違いを示すためのBashスクリプト

2つのリストがあるとしましょう:

guests-2016.txt

Peter
Michael
Frank
Dirk

guests-2017.txt

Mark
Michael
Dirk
Lilly

ゲストの2つの新しいリストを作成するにはどうすればよいですか?

  1. guests-2016.txtにいるが、guests-2017.txtにはないゲスト(former_guests.txt

  2. guests-2016.txtにいなかったが、現在guests-2017.txtにいるゲスト(new_guests.txt

空白行は無視する必要があります。標準のユーティリティのみを使用する必要があります。

私の考えは、diffを使用して、後処理を行うことです。

4
NoobieNoob

2つのsortedファイルが与えられた場合、commがこれを行います。

たとえば、-2 -3コマンドラインオプションと-1 -3コマンドラインオプションの組み合わせを参照してください。

3
Kusalananda

チェック、それは仕事をしますか。必要に応じて説明を追加します。

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
1
MiniMax