変更と新しい追加のための違いを2つのファイルに保存する

変更と新しい追加のための違いを2つのファイルに保存する

new.txt新しいファイル(例)と古いファイル(例old.txt)を比較して、新しいファイルに追加された内容を確認したいと思います。新しく追加された情報をという名前の新しいファイルに追加し、変更されnewCourses.txtた情報をに追加しようとしていますmodifiedCourses.txt。 diffでこれが可能でない場合、パッケージやソフトウェアをインストールせずに代替策は何ですか?

old.txt

2016 2BUSI 4850 K002 BUSINESS MW 02:10P-09:30P
2016 2BUSI 4840 K002 PRESPECH MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC MW 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 04:10P-09:30P

new.txt

2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
2016 2BUSI 4840 K002 PRESPECH MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC MF 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P
2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P

これを行うときの出力は次のとおりですdiff old.txt new.txt

1c1
< 2016 2BUSI 4850 K002 BUSINESS MW 02:10P-09:30P
---
> 2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
3,4c3,5
< 2016 2BUSI 4820 K002 SCHLOFSC MW 07:10P-09:30P
< 2016 2BUSI 4870 K002 HISTORYZ MW 04:10P-09:30P
\ No newline at end of file
---
> 2016 2BUSI 4820 K002 SCHLOFSC TF 07:10P-09:30P
> 2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P
> 2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P
\ No newline at end of file

newCourses.txtたとえば、次の2つの異なるファイルに出力するにはどうすればよいですか?

2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P

そしてmodifiedCourses.txt含める

2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC TF 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P

答え1

あなたが使用できるawk

awk 'NR==FNR{ z[$5]=$0; next}{ if ($5 in z){ if ($0!=z[$5]){
print >"modifiedCourses.txt"}} else { print >"newCourses.txt"}}' old.txt new.txt

これはold.txt行を読み取り、配列に保存します(インデックスはコースの名前です)。次に、new.txt各コースを読み、配列のインデックスであることを確認します。その場合は行が変更されたことを確認し、そうであれば変更されたことを確認します。 will印刷しますmodifiedCourses.txt。インデックスでない場合、重要な変更が時間だけの場合は、newCourses.txt
次の$0行を印刷します。$7

関連情報