削除、変更、および追加された行を検索する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行のうちどの行が削除されたかを判断することはできません。するかさえ判断できません。