저는 쉘 스크립팅을 처음 접했고 현재 배우고 있습니다.
두 개의 파일이 있습니다.
파일 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