두 파일의 내용을 가로 및 세로로 비교

두 파일의 내용을 가로 및 세로로 비교

두 개의 파일이 있습니다.

File1의 내용은 다음과 같습니다.

1 2 3 4 5 6 7 8 10

File2의 내용은 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10

두 파일의 차이점을 찾고 홀수를 인쇄하여 어떤 파일에서 왔는지 어떻게 알 수 있습니까?

예를 들어 이 경우 9File2에만 나타나므로 명령을 실행하고 다음 줄의 출력을 얻으려면 어떻게 해야 합니까?

9 is only in File2

답변1

깔끔한 형식(공백 x 개행)이 있는 경우 가장 쉬운 방법은 행을 행으로 변환하고 다음과 같이 비교하는 것입니다.

diff <( sed -e "s/ /\n/g" h.txt ) v.txt

h.txt수평레일은 어디에 있고, v.txt수직레일은 어디에 있나요?

답변2

(G)AWK를 사용할 수도 있습니다.

차이점을 찾으려면 먼저 AWK를 사용하여 file1.txt를 줄별 표현으로 변환한 다음 결과를 diff로 파이프합니다.

gawk 'BEGIN {FS = " "} ; {for(i=1; i<=NF; i++) print $i}' file1.txt | diff file2.txt - 

답변3

이를 수행하는 방법은 여러 가지가 있습니다 comm.

먼저 출력을 printf해석하기 위한 헤더 comm(요청된 파일 이름 제공)를 지정한 다음 comm정렬된 입력에 대해 실행하여 두 파일에 모두 있는 줄을 억제합니다( -3). 두 개의 입력은 comm절차적 대체입니다. 저는 don_crissti의 tr제안을 사용하여 공백을 File1줄 바꿈으로 변환한 다음 두 파일을 모두 에 전달했습니다 . sort이는 comm필수입니다.

printf "File1\tFile2\n"; comm -3  <(tr ' ' '\n' < File1 | sort)  <(sort File2)

샘플 실행

입력 파일 1:

1 2 3 4 5 6 7 8 10 11

입력 파일 2:

1
2
3
4
5
6
7
8
9
10

산출:

$ printf "File1\tFile2\n"; comm -3 <(sed 's/ /\n/g' File1 |sort ) <(sort File2)
File1   File2
11
        9

관련 정보