다음과 같은 파일이 있습니다.
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
1hdohdsohsoihssodhoishs
2nfdksnkdsnfsdsjndkdj
3kjdscdskndskjndndsdsdsd
5
마찬가지로, 한 파일에 1부터 5까지의 청크가 거의 20,000개 있을 수 있습니다.
청크 1부터 5까지의 수를 계산한 다음 파일을 더 작은 4개의 파일로 분할해야 합니다. 처음 3개 파일은 동일한 수의 블록 1~5를 가질 수 있으며, 마지막 작은 파일에는 나머지 블록 1~5가 있을 수 있습니다.
1부터 5까지 5개의 블록이 있다고 가정해 보겠습니다.
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
1hdohdsohsoihssodhoishs
2nfdksnkdsnfsdsjndkdj
3kjdscdskndskjndndsdsdsd
5
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
1hdohdsohsoihssodhoishs
2nfdksnkdsnfsdsjndkdj
3kjdscdskndskjndndsdsdsd
5
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
다음과 같이 4개의 파일을 생성하겠습니다.
파일 1:
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
파일 2:
1hdohdsohsoihssodhoishs
2nfdksnkdsnfsdsjndkdj
3kjdscdskndskjndndsdsdsd
5
파일 3:
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
파일 4:
1hdohdsohsoihssodhoishs
2nfdksnkdsnfsdsjndkdj
3kjdscdskndskjndndsdsdsd
5
1weather dnsndjsdn
2nm bdbdb bdbdbdbdnnd
3gfdu hsihdishdis
5
Unix 스크립트를 사용하여 이를 달성하는 방법을 제안할 수 있는 사람이 있습니까?
어떤 도움이라도 대단히 감사하겠습니다.
답변1
그렙을 사용하시겠습니까?
grep -E '^1' < file_to_parse > blocks_1
grep -E '^2' < file_to_parse > blocks_2
grep -E '^3' < file_to_parse > blocks_3
grep -v -E '^1' | grep -v -E '^2' | grep -v -E '^3' < file_to_parse > other_blocks
검증되지 않은.
답변2
좋습니다. 입력을 받아 분리한 5
다음 해당 청크를 별도의 파일로 분할하시겠습니까?
실제로 마지막 파일에 "추가"를 추가하는 것은 전체 파일을 읽어야 하기 때문에 생각보다 조금 어렵습니다.첫 번째분포를 알기 전에는 출력을 반복하는 것이 쉽습니다.
- 4개의 파일 핸들 열기
- 레코드 구분 기호를 로 설정합니다
5
. - 입력 레코드를 반복하여 "블록" 번호를 기준으로 파일 핸들을 선택합니다.
$.
- 해당 fh로 인쇄
그것은 다음과 같습니다:
#!/usr/bin/env perl
use strict;
use warnings;
my $num_files_to_write = 4;
use Data::Dumper;
my @filehandles;
for my $id ( 1..$num_files_to_write ) {
open ( my $fh, '>', "file_$id.txt" ) or die $!;
push @filehandles, $fh;
}
local $/ = '5';
while ( <> ) {
select $filehandles[$. % $num_files_to_write];
print;
}
foreach my $fh ( @filehandles ) {
close ( $fh );
}
참고 - "첫 번째" 블록이 0이기 때문에 정확히 원하는 순서가 아니지만 첫 번째 파일 번호는 1입니다. 더하기/빼기만큼 간단합니다 $. + 1 % $num_files_to_write
. 하지만 어떤 파일이 무엇을 가져오는지 관심이 있는지 아니면 단지 파티션 문제인지에 따라 다릅니다.