gpt4 book ai didi

linux - 如何使用 Perl 将数据文件的 A 列除以 B 列

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:12 25 4
gpt4 key购买 nike

我得到了一个文本文件,其中包含按列排序的一大堆数据。每列都是用逗号分隔。

如何将一列除以另一列以打印输出答案?我现在正在使用 Perl,所以它必须在 Perl 中完成。我怎么能这样做呢?

这是我到目前为止所拥有的:

 #!/usr/bin/perl

open (FILE, 'census2008.txt');
while (<FILE>) {
chomp;
($sumlev, $stname,$ctyname,$popestimate2008,$births2008,$deaths2008) = split(",");
}
close (FILE);
exit;

最佳答案

有几个选项:

  • 逐行读取文件,split ',' 上的列并除以相关列(不要忘记处理被零除错误)

  • 做与单行相同的事情:

    $ perl -F/,/ -lane 'print( $F[1] == 0 ? "" : $F[3]/$F[1] )' file.txt
  • 利用现成的 CPAN 模块,如 Text::CSV

<小时/>

当然,还有更多非正统/疯狂/难以言喻的替代方案,如 TMTOWTDI ™,因此人们可以:

  • 使用正则表达式解析出相关列并划分匹配项:

    if (/^\d*,(\d+),\d*,(\d+)/) { say $2/$1 if $2 != 0; }
  • 使用 s///e 执行此操作:

    $ perl -ple 's!^\d*,(\d+),\d*,(\d+).*$! $2 == 0 ? "" : $2/$1 !e' file.txt;
  • 让 shell 通过反引号完成肮脏的工作:

    sub print_divide { say `cat file.txt | some_command_line_command` }

关于linux - 如何使用 Perl 将数据文件的 A 列除以 B 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com