현재 저는 4개의 파일로 구성된 매우 구체적인 세트를 생성하는 프로세스를 사용하고 있습니다. 제가 사용하는 프로세스는 아래 첨부된 프로세스 그림에 나와 있습니다.
첫 번째 줄은 이전 문제에 대한 솔루션의 일부입니다.임의의 일련번호.
perl -e 'for(RANGESTART..RANGESTOP){$x = $_ + 0; print "$x" . "','\n";}' > filename.csv
보시다시피 RANGESTART는 일반적으로 30000000처럼 보입니다. RANGESTOP은 일반적으로 30010000처럼 보이며 30,000,000부터 시작하여 10,000개의 숫자를 제공합니다.
검증 목적(규제 기관에서 요구함)을 위해 생성된 숫자가 고유하고 중복되지 않았는지 확인하는 검사를 수행해야 합니다. 이 유효성 검사에서는 보조 파일(filename-sort.csv)을 생성해야 합니다. 이를 달성하기 위해 다음을 사용하고 있습니다.
sort -u -o filename1.csv filename2.csv
현재 두 개의 파일이 있습니다.
생산 라인에서 라벨을 인쇄하려면 타사 응용 프로그램(Seagull Scientific의 Bartender)을 사용해야 합니다. 줄의 한 쪽에는 짝수만 포함된 파일이 필요하고, 다른 쪽에는 홀수만 포함된 파일이 필요합니다. 이를 달성하기 위해 다음을 사용하고 있습니다.
awk '{print>sprintf("%sfile.csv",NR%2?"even":"odd",PROCINFO["pid"])}' filename.csv
이제 4개의 파일이 생겼습니다.
규제 당국은 잠재적 감사를 완화하기 위해 4가지 문서를 요구합니다.
프로세스는 잘 진행되었지만 새로운 숫자 집합이 필요할 때마다 직접 참여해야 했습니다.
내 질문은 두 부분으로 구성됩니다.
파트 A: 이미 Perl, Sort 및 awk로 수행한 것처럼 세 가지 별도의 Perl 명령으로 모든 작업을 수행하고 싶습니다.
파트 B: 파트 A의 세 가지 Perl 명령을 원래 형식으로 유지하면서 이 세 가지 Perl 명령을 하나의 Perl 스크립트로 결합할 수 있기를 원합니다.
나는 이 Perl 스크립트가 사용자에게 시작 번호, 끝 번호 및 8자리 날짜(YYYYMMDD)를 요구할 것이라고 생각합니다. 스크립트가 완료되면 첫 번째 파일(YYYYMMDD.csv) 생성 확인, 정렬 파일 생성 확인(YYYYMMDD-sort.csv) 및 짝수/홀수 파일 생성 확인(YYYYMMDD.csv)을 확인하기 위해 사용자 입력을 요청해야 합니다( 파일.csv). csv 및 이상한 파일.csv).
파일 생성 프롬프트가 다음과 같이 작동한다고 생각합니다.
- YYYYMMDD.csv를 생성하려면 "Y" 또는 "YES"를 입력합니다(다른 대답은 스크립트를 종료해야 합니다).
- YYYYMMDD-sort.csv를 생성하려면 "Y" 또는 "YES"를 입력하세요(다른 대답을 입력하면 스크립트가 종료되어야 함).
- Evenfile.csv 및oddfile.csv를 생성하려면 "Y" 또는 "YES"를 입력합니다(다른 대답은 스크립트를 종료해야 합니다).
마지막으로 이 Perl 스크립트를 Apple 터미널, Linux 터미널 및 Windows 7 Pro CMD 라인에서 실행하고 싶습니다.
내가 너무 많은 것을 요구하고 있는 걸까? 그렇다면 왜? 그렇지 않다면 어떨까요?
답변1
당신의 직업은 다음과 같이 줄어들 수 있을 것 같습니다:
perl -e '
use POSIX qw(strftime);
my ($start, $num) = (30_000_000, 10_000);
my @all = ( $start .. $start + $num -1 ); # 10,000 numbers
my @odds = grep { $_ % 2 == 1 } @all;
my @evens = grep { $_ % 2 == 0 } @all;
my $filename = strftime "%Y%m%d", localtime;
my $fh;
open $fh, ">", "$filename.csv"; print $fh join("\n", @all), "\n"; close $fh;
open $fh, ">", "$filename-sort.csv"; print $fh join("\n", @all), "\n"; close $fh;
open $fh, ">", "$filename-odds.csv"; print $fh join("\n", @odds), "\n"; close $fh;
open $fh, ">", "$filename-evens.csv"; print $fh join("\n", @evens), "\n"; close $fh;
'
아까 말했듯이 파일이 이미 정렬되어 있으니 굳이 파일을 정렬해야 한다는 게 이해가 안 되네요.