Linux 通过匹配文本替换下一个文件列值中的值列
我的问题很简单,我有两个文件,第一个是值列表,第二个是文本Linux 通过匹配文本替换下一个文件列值中的值列,linux,bash,awk,Linux,Bash,Awk,我的问题很简单,我有两个文件,第一个是值列表,第二个是文本 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
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:bonds和我想复制到文件末尾我想你想要这个: 文件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);
}
#/usr/bin/perl
开放式(F,“
很高兴你的问题很简单。我不想问这里的人一些复杂的问题。我有数千行的列,很难用逗号添加或删除。请给出一个阅读这些空间的建议。这样我就不会弄乱文件顺序对不起,我认为您理解错误了,NB应该与文件2的NB匹配,然后替换值。我想你对这个问题理解错了。您的代码只是替换列文本,它与文本不匹配并替换它