두 파일을 구별하고 세 번째 파일에서 고유한 출력을 얻습니다.

두 파일을 구별하고 세 번째 파일에서 고유한 출력을 얻습니다.

저는 쉘 스크립팅을 처음 접했고 현재 배우고 있습니다.

두 개의 파일이 있습니다.

파일 1:

1   StartInstall, CDM_2.5B263, OK       
2   EndInstall, CDM_2.5B263, SUCCESS    
3   StartPatch, CDM_2.5.0.2B1, OK       
4   StartPatch, CDM_2.5.0.3B1, OK       
5   EndPatch, CDM_2.5.0.3B1, SUCCESS 

파일 2:

1   StartInstall, CDM_2.5B263, OK       
2   EndInstall, CDM_2.5B263, SUCCESS    
4   StartPatch, CDM_2.5.0.3B1, OK       
5   EndPatch, CDM_2.5.0.3B1, SUCCESS    

파일 1과 파일 2의 차이점을 찾아야 합니다. 행이 누락된 경우 쉘 스크립트는 누락된 행을 표시하고 이를 다른 텍스트 파일(예: result.txt)에 기록해야 합니다. 쉘 스크립트는 누락된 줄이 어느 두 줄 사이에 있는지도 표시해야 합니다.

Error.txt 예를 들어 출력은 Line Missing 과 같아야 합니다 .

3   StartPatch, CDM_2.5.0.2B1, OK

2에서 4 사이

답변1

comm파일이 정렬되어 있으므로 를 사용하십시오 .

comm -3 file1 file2 > result.txt

출력에는 존재 file1하지만 존재하지 않는 행 file2과 존재 하지만 탭 접두어가 file2없는 행이 포함됩니다.file1

파일이 정렬되어 있지 않으면 먼저 정렬하세요. 일반 대신 bash, ksh 또는 zsh를 사용한다고 가정합니다 sh.

comm -3 <(sort file1) <(sort file2) > result.txt

답변2

아마도 이것이 가장 쉬운 방법일 것입니다. 참고는 줄의 문자가 다르다는 것을 나타내는 <생략입니다 . |(5번째 줄 file1.txt에는 복사-붙여넣기에서 일부 공백 문자가 누락되었습니다.)

$diff -y file1.txt file2.txt > diff.txt

1   StartInstall, CDM_2.5B263, OK                               1   StartInstall, CDM_2.5B263, OK
2   EndInstall, CDM_2.5B263, SUCCESS                            2   EndInstall, CDM_2.5B263, SUCCESS
3   StartPatch, CDM_2.5.0.2B1, OK                             <
4   StartPatch, CDM_2.5.0.3B1, OK                               4   StartPatch, CDM_2.5.0.3B1, OK
5   EndPatch, CDM_2.5.0.3B1, SUCCESS                          | 5   EndPatch, CDM_2.5.0.3B1, SUCCESS

새 파일이 출력되지는 않지만 두 파일을 시각적으로 비교하고 누락된 줄과 문자를 시각적으로 강조하는 vimdiff 세션을 얻게 됩니다.

$vimdiff file1.txt file2.txt

관련 정보