첫 번째 열을 기준으로 두 파일을 비교합니다.

첫 번째 열을 기준으로 두 파일을 비교합니다.

두 개의 파일이 있는데 첫 번째 파일에는 있고 두 번째 파일에는 없는 줄만 포함된 새 파일을 얻고 싶습니다. 예:

파일1:

ID      firstname        lastname
1       John             Wilkens
2       Andrea           Smith
3       Matthew          Freberg
4       Brenda           Something

파일2:

ID      firstname        lastname
1       John             Wilkens
2       Andrea           Willems
3       Jay              Freberg
5       Mike             Hart

산출:

ID      firstname        lastname
4       Brenda           Something

comm을 사용해 보았지만 ID 2와 3과 같이 무언가 변경된 행도 제공됩니다.

이것 좀 도와주실 수 있나요?

답변1

$ awk 'NR==FNR{a[$1]; next} FNR==1 || !($1 in a)' file2 file1
ID      firstname        lastname
4       Brenda           Something
  • NR==FNR{a[$1]; next}첫 번째 열을 사용하여 file2배열 키 작성
    • NR지금까지 읽은 총 레코드 수를 추적하고 FNR현재 읽고 있는 파일에 대해서만 레코드 번호를 갖습니다. 따라서 NR==FNR첫 번째 파일에만 적용됩니다(비어 있지 않다고 가정).
  • FNR==1 || !($1 in a)파일 의 경우 file1헤더 줄을 인쇄하거나 배열에서 첫 번째 열을 찾을 수 없는 경우a
  • awk -F'\t' '...'입력 내용이 탭으로 구분되어 있고 awk -F, '...'쉼표로 구분되어 있는 경우에 사용하세요 .

첫 번째 파일이 비어 있을 수 있으면 다음을 사용하십시오.

awk '!f{a[$1]; next} FNR==1 || !($1 in a)' file2 f=1 file1

f그러면 두 파일 사이에 플래그가 설정됩니다 .

답변2

Bash 명령줄에서는 다음과 같이 할 수 있습니다. file2에서 ID를 필터링하고 file1에서 찾으십시오. 단, 줄의 시작 부분에서만 찾으십시오.

$ grep -vf <(< file2 tail -n+2 | grep -Eo '^[^ ]{1,}'|sed 's/.*/^& /') file1
ID      firstname        lastname
4       Brenda           Something

관련 정보