쉘 스크립트 bash에는 키와 값이 포함된 약 1.2GB 데이터의 2개의 큰 파일이 있습니다. 키를 기반으로 두 파일을 비교하고 값의 차이를 세 번째 파일에 저장해야 하며, 파일 2는 항상 파일 1 세트의 하위가 됩니다. , 파일 2에 존재하지 않는 값(키의 경우)과 파일 1에 있는 고유한 값만 찾으면 됩니다.
파일 1:
test1 marco;polo;angus
test2 mike;zen;liza
test3 tom;harry;alan
test4 bob;june;janet
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule 343323H;343434311H;454656556H;343343432H
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 232324L;2226556H;343223432H
파일 2:
test1 polo;angus
test2 mike
test4 bob;janet
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 232324L;343223432H
file1과 file2의 처음 두 열을 비교하고(처음 두 열에서 file2의 전체 내용을 검색) 일치하는 경우 값의 차이를 인쇄하고 싶습니다. 그런 다음 파일 1의 두 번째 줄을 검색합니다. 파일 1의 고유 키도 인쇄되어야 합니다.
예상 출력:
test1 marco
test2 zen;liza
test3 tom;harry;alan
test4 june
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule 343323H;343434311H;454656556H;343343432H
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 2226556H
내 파일은 약 100,000줄을 포함하는 대용량이므로 실행 속도를 더 빠르게 만들고 싶습니다. 이는 bash 쉘 스크립트를 사용하는 쉘 스크립트에서 실행됩니다. 이러한 파일은 키( )가 있는 텍스트 파일 file1
입니다 . 값은 다음과 같습니다( ) .file2
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule
343323H;343434311H;454656556H;343343432H
답변1
쉘 스크립팅을 사용하는 경우 먼저 파일을 한 줄에 하나의 키와 하나의 값으로 정규화하십시오. 그런 다음 정렬된 경우 명령은 comm
한 쪽에서는 행을 추출할 수 있지만 다른 쪽에서는 행을 추출할 수 없습니다. 그런 다음 (필요한 경우) 파일을 다시 비정규화하세요.
더 나은 옵션은 두 개의 입력 파일을 한 줄씩 읽고 차이점을 출력하는 더 높은 수준의 언어(아마도 Perl5를 사용할 것임)로 작은 프로그램을 구축하는 것입니다. 다시 말하지만, 많은 메모리를 사용할 계획이 아니라면 입력이 정렬되기를 원합니다.
아마도 이 형식을 처리하도록 설계된 프로그램이 이미 있을 것입니다. 소프트웨어의 입력 기능을 사용하는 것이 좋은 시작점입니다.