삭제, 수정 및 추가된 행을 찾으려는 두 개의 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
변경 사항은 "병합"될 수 있으므로 결국 추가된 줄을 더 큰 변경 사항의 일부로 간주하고 모든 것을 로 표시할 수 있습니다 !
. 위에서 볼 수 있듯이 삭제된 행은 처음 두 행에 영향을 미치는 대규모 변경 사항의 일부로 간주되어 !
대신 플래그가 지정됩니다 -
.
나란히 비교( diff -y
)하면 달성하려는 목표와 관련된 몇 가지 문제를 강조하는 데 도움이 됩니다.
0, WILL_BE_REMOVED | 1, CHANGED
1, OLD <
2, SAME 2, SAME
3, SAME 3, SAME
> 4, ADDED
> 5, ADDED
diff
개별 줄의 내부 구조를 알지 못하기 때문에 이전 파일의 처음 두 줄 중 어느 줄이 삭제되었는지 판단할 수 없으며, 두 줄 중 하나가 변경된 경우 두 줄을 삭제하고 한 줄을 삭제하는 대신 한 줄을 추가해야 하는지조차 판단할 수 없습니다.
답변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