使用 Perl 计算偶数/奇数

使用 Perl 计算偶数/奇数

目前,我正在使用一个过程来创建一组非常具体的四个文件。我正在使用的流程如下面所附的流程图片所示:

过程图像

第一行是解决方案的一部分,针对之前的问题随机序列号

perl -e 'for(RANGESTART..RANGESTOP){$x = $_ + 0; print "$x" . "','\n";}' > filename.csv

正如您所看到的,RANGESTART 通常类似于 30000000 RANGESTOP 通常类似于 30010000,给我 10,000 个数字,从 30,000,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

现在我有了四个文件。

这四个文件是监管机构为了安抚潜在审计所必需的。

这个过程运行良好,但每次需要新的号码集时都需要我的直接参与。

我的问题有两个部分:

A 部分:我想用三个单独的 perl 命令来完成这一切,就像我已经用 perl、sort 和 awk 来完成这一切一样。

B 部分:我希望能够将这三个 perl 命令合并到一个 perl 脚本中,而保留 A 部分中的三个 perl 命令,保持其原始形式。

我想象这个 perl 脚本会要求用户提供起始号码、结束号码和 8 位日期 (YYYYMMDD)。脚本完成后,它应该要求用户输入以确认创建第一个文件 (YYYYMMDD.csv)、确认创建排序文件 (YYYYMMDD-sort.csv) 并确认创建偶数/奇数文件 (evenfile.csv)。 csv 和 oddfile.csv)。

我想象文件创建提示的工作方式如下:

  1. 输入“Y”或“YES”以创建 YYYYMMDD.csv(任何其他答案都应退出脚本)。
  2. 输入“Y”或“YES”以创建 YYYYMMDD-sort.csv(任何其他答案都应退出脚本)。
  3. 输入“Y”或“YES”以创建 Evenfile.csv 和 oddfile.csv(任何其他答案都应退出脚本)。

最后,我希望这个 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;
'

正如我所说,我不明白需要对文件进行排序,因为文件已经排序。

相关内容