我的问题很简单,我有两个文件,首先包含值列表和文本,例如
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: 债券,我想复制到文件末尾
最佳答案
我假设你想要这个:
文件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);
}
关于linux - 通过匹配文本替换下一个文件列值中的值列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465576/