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

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

두 개의 파일이 있습니다.

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해석하기 위한 헤더 (요청된 파일 이름 제공)를 지정한 다음 정렬된 입력에서 실행하여 두 파일에 존재하는 줄을 억제합니다( ). 두 개의 입력은 공백을 개행 문자로 변환하기 위해 don_crissti의 제안을 사용하는 프로세스 대체입니다 . 그런 다음 두 파일을 모두 를 통해 전달해야 합니다 .commcomm-3commtrFile1sortcomm

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

관련 정보