我的问题很简单我有两个文件首先包含值列表和文本,如
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列文本来替换第2列值(例如:NA = NA),然后替换第2列中的值。
第二个问题是文件2还有一些其他部分我想复制并在替换后创建一个新文件。
其他部分以 11940!NBOND:债券,我想复制到文件的末尾
答案 0 :(得分:0)
我认为你想要这个:
File1中:
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);
}