削除、変更、および追加された行を検索する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