join -v1 fileA fileB
나는 말하는 것과 반대되는 작업을 수행해야 합니다 . fileA의 첫 번째 필드가 fileB의 모든 줄의 첫 번째 필드와 일치하지 않는 줄을 인쇄해야 합니다. 대신 fileA에 줄을 쓰고 싶습니다.하다(첫 번째 필드에서)은 fileB의 줄과 일치합니다.
make 를 시도했지만 join -o 1.1 2.1 fileA fileB
첫 번째 파일에 작성된 줄 대신 겹치는 줄이 반복됩니다(동일한 경우).
가장 쉬운 방법은 무엇입니까?
답변1
사토 카츠라가 연기한댓글을 달았습니다., fileB의 필드 1만 보도록 조인을 "속인" 다음 일반 조인을 수행하도록 요청할 수 있습니다. 그러면 fileA의 줄과 (스푸핑된) fileB의 (빈) 나머지 줄이 인쇄됩니다.
join fileA <(awk '{print $1}' fileB)
주어진 입력 파일:
$ cat fileA
1 blah
2 foo
3 bar
$ cat fileB
3 barely
4 baz
5 qux
결과 출력은 다음과 같습니다.
$ join fileA <(awk '{print $1}' fileB)
3 bar
와일드카드awk의 출력을 다음으로 파이프하여 이를 보다 직접적으로(프로세스 대체 방지) 수행할 수 있음을 지적합니다 join
.
awk '{print $1}' fileB | join fileA -
답변2
comm
두 파일이 모두 정렬된 경우 다음과 같이 파일에 없는 줄을 표시할 수 있습니다 .fileA
fileB
comm -23 fileA fileB
fileB
아니면 그 안에 없는 행도 원하시나요 fileA
?