주요 부분이 유사하지만 혼란스러운 두 파일을 비교할 수 있는 방법을 제안해 주십시오. 예:
A file
가지다
72444 55555
72445 55666
55666 72446
B File
가지다
72444 55555
55666 72446
72445 55666
xxxxx yyyyy
그래서 출력 파일 파일과 오류가 발생한 파일 이름의 차이를 얻고 싶습니다. 위의 나머지 부분이 동일하다면 아마도 다음과 같을 것입니다.
B File xxxxx yyyyy
답변1
이 comm
유틸리티는 두 파일 중 하나에 고유하거나 두 파일 모두에 공통적인 행을 추출할 수 있습니다. 이 유틸리티를 사용하려면 두 파일을 모두 정렬해야 하므로 "복잡한 줄" 문제가 해결됩니다.
유틸리티 comm
의 기본 출력은 탭으로 구분된 세 개의 열로 구성됩니다.
- 첫 번째 파일에서만 행이 발견됩니다.
- 두 번째 파일에서만 행이 발견됩니다.
- 두 파일 모두에서 줄이 발견되었습니다.
열을 활성화 -1
하거나 비활성화할 수 있습니다 .-2
-3
여기서는 두 가지 프로세스 대체를 사용하여 정렬된 입력 데이터를 생성 comm
하고 두 파일에 고유한 데이터인 처음 두 열만 표시하도록 요청합니다.
$ comm -3 <(sort fileA) <(sort fileB)
xxxxx yyyyy
$ comm -3 <(sort fileA) <(sort fileB) | cut -f 2-
xxxxx yyyyy
보시다시피, 두 번째 열은 무언가를 포함하는 유일한 열이므로 이 행은 xxxxx yyyyy
에만 나타나고 fileB
다른 모든 행은 두 파일에 공통된다는 결론을 내릴 수 있습니다.
그렇지 않은 경우 -3
세 번째 열에서도 공통점을 확인할 수 있습니다.
$ comm <(sort fileA) <(sort fileB)
55666 72446
72444 55555
72445 55666
xxxxx yyyyy
답변2
의 경우 zsh
배열 빼기 연산자를 사용할 수 있습니다.
$ a='A file' b='B file'
$ al=( ${(f)"$(<$a)"} ) bl=( ${(f)"$(<$b)"} )
$ print -rC1 -- "$a "${^al:|bl} "$b "${^bl:|al}
B file xxxxx yyyyy
어디:
$(<file)
file
줄 바꿈 없이 콘텐츠로 확장${(f)expansion}
빈 요소를 버리고 새 줄로 분할하므로 및 각각에 대해 비어 있지 않은 줄이$al
포함됩니다 .$bl
A file
B file
${a:|b}
(배열 빼기)a
에도 포함된 요소(막대)를 제외하고 배열 요소로 확장됩니다 .b
text${^array}
대신array=(a b)
에 확장할 때 여기서는 배열 빼기 결과의 요소에 파일 이름 접두사를 사용합니다.texta
textb
texta
b
print -rC1 --
print
열 s의 각 매개변수r
aw1
C
두 파일에 동일한 줄이 여러 번 나타나면 두 파일의 발생 횟수가 다르더라도 보고되지 않습니다.