
두 개의 파일이 있는데 첫 번째 파일에는 있고 두 번째 파일에는 없는 줄만 포함된 새 파일을 얻고 싶습니다. 예:
파일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