2014-07-25 117 views
1

我正在處理由選項卡分隔的非常大的數據的多個文件。每行都有一個日期,但有些只包含'0'值是非常重要的。在文件中,如果期望的日期列爲'0',則可以使用額外的日期列。如何用附加日期列的值替換「0」值的列?我的示例數據如下。另外下面有條件地將列值替換爲另一列的值perl

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

你需要使用'=='進行比較,'='是賦值運算符。['perlop#Equality'](http://perldoc.perl.org/perlop.html#Equality-Operators) –

+0

@HunterMcMillen當我使用如果($ F [2] == 0)而不是if($ F [2] = 0),我得到「Desired_date12/23/2014」作爲我的輸出,其餘的數據都被吹走了。 $ F [2]的值爲' 0「,但不是簡單地將Desired_date域移動過來。 – JDE876

+0

如果您更新問題中的代碼,它將更具可讀性。 –

回答

0

兩個問題與您的代碼:

  1. 當該字段爲0,你應該只複製替代值 - 而不是同時打印結果的任務。
  2. 您需要打印每次讀(行不管你是否修改您當前print "@F\n"是外循環,所以它只能運行一次

工作代碼:。

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

當然!!拆分後重新加入!很棒! – JDE876

+0

還有一個問題。假如數據有空字段,即('2345',\ t','\ t','joejohn'),並且空字段被省略並且回滾,即('2345','\ t','joejohn') 。有什麼辦法可以防止這種情況發生? – JDE876

相關問題