2014-01-30 52 views
-1

我的問題替換從下一個文件的列值的值的列很簡單,我有兩個文件,第一個有值的列表和文字一樣通過匹配文本

NA NPH1 0.210000 
    NB NPH2 -0.146000 
    NC NPH3 0.179000 
    ND NPH4 -0.130000 

和第二個文件格式

    column 1  column 2 

    5 O1 139 BCL ND NPH4 -0.130000  14.0070   0 
    6 O1 139 BCL C1A CPAN 0.031000  12.0110   0 
    7 O1 139 BCL CHA CPM2 -0.163000  12.0110   0 
    8 O1 139 BCL C4D CPA3 -0.007000  12.0110   0 
    9 O1 139 BCL C1B CPAN -0.231000  12.0110   0 
    10 O1 139 BCL CHB CPMN -0.317000  12.0110   0 

我想通過匹配來自文件1的列1文本(例如:NA = NA)來替換列2的值,然後替換列2中的值。

第二個問題是文件2有als o我想在複製後創建一個新文件。

其他部分開始 11940諾邦:債券和我想複製,直到文件

+0

很高興您的問題很簡單。不想在這裏問一些複雜的人。 –

回答

0

結束時,我想,你希望這樣的:

文件1:

NA NPH1,0.210000 
NB NPH2,0.146000 
NC NPH3,0.179000 
ND NPH4,-0.130000 

(爲了便於閱讀,我正在替換我認爲是帶有「,」的隱形標籤)

文件2:

5 O1 139 BCL,ND NPH4,-0.123456,14.0070,0 
6 O1 139 BCL,C1A CPAN,0.031000,12.0110,0 
7 O1 139 BCL,CHA CPM2,-0.163000,12.0110,0 

輸出:

5 O1 139 BCL,ND NPH4,-0.130000,14.0070,0 
6 O1 139 BCL,C1A CPAN,0.031000,12.0110,0 
7 O1 139 BCL,CHA CPM2,-0.163000,12.0110,0 

我會做這樣的事情在Perl:

#!/usr/bin/perl 

open(F,"< file1") || die; 
while(<F>) { 
     chop; 
     s/^\s*//; 
     @l = split(/,/); 
     $subs{$l[0]} = $l[1] 
} 
close(F); 
open(F,"< file2") || die; 
while(<F>) { 
     s/^\s*//; 
     @l = split(/,/); 
     if($subs{$l[1]}) { 
       $l[2] = $subs{$l[1]}; 
     } 
     print join(',',@l); 
} 
+0

我有成千上萬行的列難以使用逗號添加或刪除。請給出一個閱讀空間的建議。所以,我不會最終搞亂文件順序 – user3241355

+0

代碼不工作:(你有沒有試過 – user3241355

+0

對不起,我認爲你錯誤地理解了這個問題,NB應該與文件2的NB匹配,然後替換值。認爲你錯誤地理解了這個問題,你的代碼只是將列文本替換爲與文本不匹配並替換它 – user3241355