>

두 개의 플랫 파일 A&B가 있습니다. A는 수백만 개의 레코드를 가진 큰 파일이고 B는 A의 하위 집합으로 간주됩니다. A는 하나의 고유 키를 가진 20 개의 열을 가지고 있고 B는 동일한을 가진 5 개의 열을 가지고 있습니다 고유 키. B와 A를 비교하고 파일 B에있는 레코드가 파일 A에도 있고 각 열에 동일한 데이터가 있는지 확인하는 방법을 알려주십시오.

  • 답변 # 1

    내 명령을 보여주기 위해 두 개의 파일을 만들었습니다

    file1 :

    1 a1 b1 c1 d1 e1
    2 a2 b2 c2 d2 e2
    3 a3 b3 c3 d3 e3
    4 a4 b4 c4 d4 e4
    5 a5 b5 c5 d5 e5
    
    

    file2 :

    2 b2 c2 e2
    4 b4 c4 xx
    5 b5 c5 e5
    
    

    첫 번째 열은 고유 키입니다. 공통 열은 b 열입니다. c  그리고 e . 일반적인 행은 2 입니다 4  그리고 5 . 행 4   e 열에 다른 값이 있습니다 .

    다음은 출력 명령입니다 :

    $ comm -1 -3 <(cut -d' ' -f1,3,4,6 file1) file2
    4 b4 c4 xx
    
    

    파일이 아직 정렬되지 않은 경우 다음과 같이 수행 할 수 있습니다.

    $ comm -1 -3 <(cut -d' ' -f1,3,4,6 file1 | sort) <(sort file2)
    
    

    설명 :

    cut -d' ' -f1,3,4,6 file1
    
    

    파일에서 필드 번호 1, 3, 4 및 6을 인쇄하십시오. 필드는 공백으로 구분됩니다. 필드가 쉼표로 구분 된 경우 cut 를 사용하십시오.  이처럼 : cut -d','

    <( ... )
    
    

    프로세스 대체

    comm -1 -3 file1 file2
    
    

    file2에 고유 한 줄을 인쇄하십시오.

    주의 사항 :

    cut  필드에서 구분 문자가 문자로 나타날 수있는 경우 문제가 있습니다.

    예 :

    "field1","field2,stillfield2","field3"
    
    

    cut   "field2,stillfield2" 의 쉼표를 이해하지 못합니다  이 분야의 일부입니다.

    파일이 이와 같으면 csv 처리 기능이 내장 된 프로그래밍 언어를 사용하는 것이 좋습니다. 예를 들어 python입니다.

  • 답변 # 2

    파일에 다른 열이 있으면 가장 쉬운 방법은 원하는 언어를 사용하여 작은 프로그램을 작성하는 것입니다. 와이즈 비즈  그리고 diff  파일의 줄 구조가 동일하지 않으면 큰 도움이되지 않습니다.

  • 답변 # 3

    comm 와는 별개  그리고 comm  당신이 diff 를 사용할 수있는 솔루션  이를 위해.
    관련 데이터가 파일 A의 1, 3, 10 열, 파일 B의 1, 2, 3 열이라고 가정합니다. 우리는 grep 를 사용합니다.  A에서 열을 선택하려면이를 키워드 일치 파일로 사용하고 파일 B에서 해당 존재를 역으로 확인하십시오. 파일 B에서 파일 A에서 추출 된 일치하는 행에없는 행이 있으면 표시됩니다. 모두 일치하면 출력이 없습니다 (B는 A의 하위 집합이므로).

    cut
    
    

    파일 B에 3 개 이상의 열이있는 경우 :

    grep -wvf <( cut -f1,3,10 fileA ) fileB
    
    
    grep -wvf <( cut -f1,3,10 fileA ) <( cut -f1,2,3 fileB )

관련 자료

  • 이전 debian - Xampp 설치 프로그램 오류
  • 다음 cp 명령은 기존 파일을 덮어 쓰지 않습니다