수정 및 새로운 추가를 위해 차이점을 두 파일에 저장

수정 및 새로운 추가를 위해 차이점을 두 파일에 저장

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

관련 정보