【问题标题】:extract column from CSV file and add the column using filename and column number in argument从 CSV 文件中提取列并在参数中使用文件名和列号添加列
【发布时间】:2016-07-10 06:16:43
【问题描述】:

我写了一个脚本来提取这两列;第一列是用户在参数中输入的列,第二列是第一列的下一列;现在我必须单独执行列的添加。

请注意,该文件是 CSV 文件,并以字符串作为列标题

#!/usr/bin/perl

use warnings;
use strict;

my $file = $ARGV[0];
my $coloumn_number = $ARGV[1];
my $addition = 0;
my $sum = 0;
open(my $filedata, '<', $file) or die "Can't read file '$file'\n";
while (my $line = <$filedata>) {
    chomp $line;
        my @fields = split(",", $line);
         print "$fields[$coloumn_number],";
         print "$fields[$coloumn_number+1]\n";
         $sum += $fields[$coloumn_number];
         $addition += $fields[coloumn_number+1];

          }
print "$sum";
print "$addition";

当我运行这个脚本时,我得到了错误

-bash-4.1$ ./script1.pl /diff2.csv 2
Bareword "coloumn_number" not allowed while "strict subs" in use at ./script1.pl line 17.
Execution of ./script1.pl aborted due to compilation errors.

当我在没有最后 5 行添加部分的情况下运行脚本时,它可以正常工作。

【问题讨论】:

    标签: perl csv unix scripting


    【解决方案1】:

    您在$addition += $fields[coloumn_number+1]; 中错过了$。应该是$addition += $fields[$coloumn_number+1];

    【讨论】:

    • 抱歉,可能是错字!但是当我运行程序时它仍然得到Argument "SITE ENGINEERS 2" isn't numeric in addition (+) at ./script1.pl line 16, &lt;$filedata&gt; line 1. Argument "ELECTRICIANS" isn't numeric in addition (+) at ./script1.pl line 17, &lt;$filedata&gt; line 1. 30,13 26,12 30,19 30,14 26,18 22,20 23,12 20,16 29,16 23,17 它仍然不允许我打印添加,因为列的字符串标题
    • 输入文件会很有帮助
    • 这里是输入WEEK,SITE ENGINEERS,SITE ENGINEERS 2,ELECTRICIANS,ELECTRICIANS 2,ON SITE INSPECTORS,ON SITE INSPECTORS 2,CRANE OPERATOR,CRANE OPERATOR 2 ONE,16,30,13,24,19,20,17,22 TWO,15,26,12,29,19,30,20,27 THREE,13,30,19,21,16,25,19,20 FOUR,16,30,14,25,18,24,15,26 FIVE,12,26,18,29,16,23,12,26 SIX,15,22,20,20,13,27,14,20 SEVEN,13,23,12,21,15,21,18,28 EIGHT,16,20,16,23,12,22,18,20 NINE,14,29,16,28,15,28,16,28 TEN,17,23,17,28,14,30,17,20
    • 好像是一行。这是正确的吗?而$fields[$column_number] 正好包含'SITE ENGINEERS 2' 对应的$column_number == 2
    • 输入文件看起来像 e WEEK,SITE ENGINEERS,SITE ENGINEERS 2,ELECTRICIANS,ELECTRICIANS 2,ON SITE INSPECTORS,ON SITE INSPECTORS 2,CRANE OPERATOR,CRANE OPERATOR 2 ONE,16,30,13,24,19,20,17,22 TWO,15,26,12,29,19,30,20,27 THREE,13,30,19,21,16,25,19,20 FOUR,16,30,14,25,18,24,15,26 FIVE,12,26,18,29,16,23,12,26 SIX,15,22,20,20,13,27,14,20 SEVEN,13,23,12,21,15,21,18,28 EIGHT,16,20,16,23,12,22,18,20 NINE,14,29,16,28,15,28,16,28 TEN,17,23,17,28,14,30,17,2
    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 2023-03-02
    • 2016-08-03
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多