使用另一个文件作为输入在文本文件中查找和替换

时间:2016-01-11 07:43:44

标签: bash perl unix sed

是否有一种简单的方法可以在文件中查找和替换值,使用另一个文件作为需要重新标记的值的输入?例如。我有一个制表符分隔的file1,有两列:

a|1|b|C|:1-10(-)      A1
a|2|b|E|:2-11(+)      A2
a_b|3|b|C|:300-302(-)      A3
a|5|b|C|:4-60(+)      A1
a|7|b|D|:71-72(-)      A11

其中第1列(选项卡前的所有内容)包含原始名称,第2列包含新名称。我想将其提供给file2,以替换所有出现的值。我知道使用

sed -i -e 's/a|1|b|C|:1-10(-)/A1/g' file2.txt

一次只执行一行,但有没有办法只输入file1,以便file2中的所有值都会立即重新标记?

1 个答案:

答案 0 :(得分:0)

有点hacky,但我这样做

C0243321@IKHCPKISBN0084S ~/examples/perl
$ cat file1
xx1     zz1
xx2     zz2

C0243321@IKHCPKISBN0084S ~/examples/perl
$ cat file2
xx1, xx2

C0243321@IKHCPKISBN0084S ~/examples/perl
$ perl -e 'undef $/;$file1=<ARGV>;$file2=<ARGV>;@lines=split(/\n/,$file1);for(@lines){@fields=split(/\t/);$file2=~s/$fields[0]/$fields[1]/g;}print$file2' file1 file2
zz1, zz2