perl 添加文件列的内容


Column A            | Column B    | Column C       |  Column D
35627799100             8               8               2 
35627788000             60              34              45 
35627799200             10              21              21 
35627780000             60              5               8

基本上我有一个如上所示的文件,想添加 B 列的内容,即 8+60+10+60。坦率地说,我不确定是否需要删除第一行是文本,以及我是否可以使用 split 函数并将其放入哈希中:

my %hash = map {split/s+/,$_,4} <$file>;

提前感谢您的帮助。

如果你只想总结第二列,哈希是矫枉过正的。您可以执行类似操作并直接在地图中计算总和。

my $sum;
$sum += (split /s+/, $_)[1] while <$file>;

编辑:如果您在第 2 列中有标题行或其他带有非数字值的行,那么正如下面的注释所示,您会遇到问题。 您可以通过将split换成正则表达式来避免这种情况,如下所示:

my $sum = 0;
while (<STDIN>)
{
    $sum += $1 if $_ =~ /^S+s+(d+)/;
}
如果第 1 列可能

没有文本(即该行以单个空白开头,第一个非空白表示第二列(,则将模式的第一部分从 ^S+ 更改为 ^S*

这是一个基于您的数据的示例:

use strict;
use warnings;
my $sum_column_b = 0;
<DATA>; #drop header
while( my $line = <DATA>) {
    $line =~ m/s+(d+)/; #regexpr to catch second column values
    $sum_column_b += $1;
}
print $sum_column_b, "n";  #<-- prints: 138

__DATA__
Column A            | Column B    | Column C       |  Column D
35627799100             8               8               2 
35627788000             60              34              45 
35627799200             10              21              21 
35627780000             60              5               8

最新更新