Perl을 사용하여 짝수/홀수 계산

Perl을 사용하여 짝수/홀수 계산

현재 저는 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).

파일 생성 프롬프트가 다음과 같이 작동한다고 생각합니다.

  1. YYYYMMDD.csv를 생성하려면 "Y" 또는 "YES"를 입력합니다(다른 대답은 스크립트를 종료해야 합니다).
  2. YYYYMMDD-sort.csv를 생성하려면 "Y" 또는 "YES"를 입력하세요(다른 대답을 입력하면 스크립트가 종료되어야 함).
  3. 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;
'

아까 말했듯이 파일이 이미 정렬되어 있으니 굳이 파일을 정렬해야 한다는 게 이해가 안 되네요.

관련 정보