공백으로 구분된 필드가 있는 긴 텍스트 파일이 있습니다.
cat file1.txt
Id leng sal mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534
cat file2.txt
Id number
25671 34343
76767 34234
23343 23423
66776 23343
cat output.txt
Id leng sal mon
44888 56565 45554 6868
77765 88688 87464 6848
file1.txt
네 개의 열이 있고 file2.txt
두 개의 열이 있습니다. $1
두 파일( file1.txt
, file2.txt
)의 첫 번째 열( )을 비교하여 에서 일치하지 않는 파일을 출력하고 싶습니다 file2.txt
.
나는 시도했다
join -v1 file1.txt file2.txt >output.txt
그러나 출력에는 몇 가지 오류가 있습니다. 모든 awk
/ sed
명령을 높이 평가합니다.
답변1
를 사용하려면 join
FILE1과 FILE2가 있는지 확인해야 합니다.정렬됨조인 필드에서.
다음 명령을 사용하면 됩니다.
join -v1 <(sort file1.txt) <(sort file2.txt)
답변2
이와 비슷하지만 헤더 줄은 포함되지 않습니다.
$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848
참고: 귀하의 설명이 아닌 예제 출력과 일치하도록 이를 조정했습니다. 다른 방법을 원하면 file1과 file2를 전환하면 됩니다.
이를 분석하면 다음과 같습니다.
awk
에서 필드 1만 인쇄합니다.file2.txt
grep -v
일치를 반전합니다(일치하지 않는 행을 인쇄합니다).-f -
grep
파일에서 일치 패턴 목록을 읽도록 지시합니다 . 이 경우-
(STDIN
)는awk