두 개의 구분된 파일을 첫 번째 열과 비교

두 개의 구분된 파일을 첫 번째 열과 비교

파일 1

james:hello
richard:hello2
johnson:hello3
jam3es:hello
ja1mes:hello

파일 2

james:hello
ja1mes:hello
johnson:hello3

예상 출력

richard:hello2
jam3es:hello

이 두 파일이 있고 첫 번째 열(일명 이름)을 다른 파일 이름과 비교하고 File1의 유일한 행을 인쇄하려고 합니다.

답변1

내가 상상할 수 있는 어떤 로케일에서도 파일이 첫 번째 열에서 정렬되지 않는 것 같지만, 정렬하면 ex join옵션을 쉽게 사용할 수 있습니다 -v.

$ join -t ':' -v 1 <(sort -t ':' file1) <(sort -t ':' file2)
jam3es:hello
richard:hello2

주어진 순서대로 출력이 정말로 필요한 경우 결과를 다른 sort명령으로 파이프할 수 있습니다.

답변2

awk는 깔끔한 솔루션을 제공합니다

awk -F: '
    NR == FNR {name[$1]; next}
    !($1 in name)
' file2 file1

산출

richard:hello2
jam3es:hello

샘플 입력 파일은 전체 줄이 반복되는 것을 보여줍니다. 이것이 실제로 그렇다면 다음 comm유틸리티가 유용합니다.

comm -23 <(sort file1) <(sort file2)

파일 1에 나타나는 행만 출력(옵션은 -2파일 2에만 나타나는 행을 억제하고 -3공통 행을 억제함)

jam3es:hello
richard:hello2

관련 정보