
두 개의 파일이 있습니다.
File1에는 다음 내용이 있습니다.
1 2 3 4 5 6 7 8 10
File2에는 다음 내용이 있습니다.
1
2
3
4
5
6
7
8
9
10
두 파일의 차이점을 어떻게 찾고 홀수를 인쇄하고 어떤 파일인지 알 수 있습니까?
예를 들어, 이 경우 9
File2에만 나타나므로 명령을 실행하고 다음 줄에 따라 출력을 얻으려면 어떻게 해야 합니까?
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의 제안을 사용하는 프로세스 대체입니다 . 그런 다음 두 파일을 모두 를 통해 전달해야 합니다 .comm
comm
-3
comm
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