두 개의 파일이 있습니다.
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
해석하기 위한 헤더 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