![수정 및 새로운 추가를 위해 차이점을 두 파일에 저장](https://linux55.com/image/104816/%EC%88%98%EC%A0%95%20%EB%B0%8F%20%EC%83%88%EB%A1%9C%EC%9A%B4%20%EC%B6%94%EA%B0%80%EB%A5%BC%20%EC%9C%84%ED%95%B4%20%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84%20%EB%91%90%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%A0%80%EC%9E%A5.png)
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
예를 들어 다음 과 같은 두 개의 다른 파일로 출력하려면 어떻게 해야 합니까?
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