파일 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