有条件地将列值替换为另一列的值perl

时间:2014-07-25 14:51:21

标签: perl split conditional-statements

我正在处理由tab分隔的大量数据的多个文件。非常重要的是每行都有一个日期,但有些只包含值'0'。在文件中,如果所需的日期列为“0”,则可以使用其他日期列。如何将“0”值的列替换为附加日期列的值?我的示例数据如下。

ID  NAME    Desired_Date    Additional_Date
1234    jimbob  0   12/23/2014
2345    joejohn 12/30/2014  12/31/2014

下面是我想要的输出:

ID  NAME    Desired_Date    Additional_Date
1234    jimbob  12/23/2014  12/23/2014
2345    joejohn 12/30/2014  12/31/2014

正如您所看到的,我想复制所需日期为“0”的其他日期。我有一些我试过的代码,但它似乎没有做到这一点。

while (<>) {
    my @F = split;
    if ($F[2] == 0) {
        print $F[2] = $F[3];
    }
}
print "@F\n";

目前的输出是:

Desired_date12/23/2014

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题:

  1. 当字段为0时,您应该只复制备用值 - 而不是打印分配结果。
  2. 您需要打印您阅读的每一行(无论您是否修改它。您当前的print "@F\n"都在循环之外,因此它只运行一次。
  3. 工作代码:

    while (<>) {
        my @F = split;
        if ($F[2] == 0) {
            $F[2] = $F[3];
        }
        print join("\t", @F) . "\n";
    }