変更された行と追加された行を区別する方法は?

変更された行と追加された行を区別する方法は?

削除、変更、および追加された行を検索する2つのcsvファイルがあります。 (最初のフィールドは一意のIDです。)

最初のファイルは次のとおりです。

0, WILL_BE_REMOVED
1, OLD
2, SAME
3, SAME

最新のcsvファイル:

1, CHANGED
2, SAME
3, SAME
4, ADDED
5, ADDED

私はこれが私にこれを教えてくれると思ったがdiff、私が走ったとき:

diff newer_file.csv  older_file.csv 
1c1,2
< 1, CHANGED
---
> 0, WILL_BE_REMOVED
> 1, OLD
4,5c5
< 4, ADDED
< 5, ADDED
---
> 

変更された行が追加された行と似ていることがわかります。変更と追加を区別する方法はありますか?

diffを使って欲しいものを入手できますか?そうでなければ、他のbashツールは私のユースケースに適していますか?

DELETED: 0, WILL_BE_REMOVED
UPDATED: 1, CHANGED
ADDED 4,
ADDED 5,

答え1

-cオプション(コンテキストコピー)を使用すると、変更と追加を区別できます。

diff -c older_file.csv newer_file.csv

作成(ヘッダーの後ろ)

*** 1,4 ****
! 0, WILL_BE_REMOVED
! 1, OLD
  2, SAME
  3, SAME
--- 1,5 ----
! 1, CHANGED
  2, SAME
  3, SAME
+ 4, ADDED
+ 5, ADDED

で始まる行を変更し、!で始まる行を追加します+。削除された行はで始まります-

diff変更は「マージ」される可能性があるため、最終的に追加された行をより大きな変更の一部と見なしてすべてをマークすることができます!。上記のように、削除された行は最初の2行に影響を与える大規模な変更の一部と見なされ、代わりに!フラグが立てられます-

並べて比較するdiff -yと、達成しようとしている目標に関連するいくつかの問題を強調するのに役立ちます。

0, WILL_BE_REMOVED    | 1, CHANGED
1, OLD                <
2, SAME                 2, SAME
3, SAME                 3, SAME
                      > 4, ADDED
                      > 5, ADDED

diff個々の行の内部構造を知らないため、前のファイルの最初の2行のうちどの行が削除されたかを判断することはできません。するかさえ判断できません。

答え2

ダフは素晴らしいツールですhttp://paulfitz.github.io/daff/

特にCSVの違いです。

答え3

diffオンラインで作業してください。行が異なる場合は、削除と追加を意味します。

私は「変化」の概念を理解するツールを知りません。red次の行を変更したかどうかを検討してください。yellowあなた(個人として)red行が削除され、yellow行が追加されたかどうか、または同じ行が完全に変更されたことを確認しますか?

関連する側面の質問では、私は個人的に均一な違いを好みます。私はそれがスクリプトよりも読みやすいと思いますed。サンプルデータの場合、次のように表されます。

diff -u older_file.csv newer_file.csv
--- older_file.csv      2019-02-04 12:23:32.416529000 +0000
+++ newer_file.csv      2019-02-04 12:23:41.551570700 +0000
@@ -1,4 +1,5 @@
-0, WILL_BE_REMOVED
-1, OLD
+1, CHANGED
 2, SAME
 3, SAME
+4, ADDED
+5, ADDED

関連情報