我目前有2个文件,文件A和文件B.文件A中的某些行包含文件B中某行的子字符串。我想用文件B中的相应字符串替换这些子字符串。
文件A的例子:
@Name_1
foobar
info_for_foobar
evenmoreinfo_for_foobar
@Name_2
foobar2
info_for_foobar2
evenmoreinfo_for_foobar2
文件B的示例:
@Name_1_Date_Place
@Name_2_Date_Place
我想要的输出:
@Name_1_Date_Place
foobar
info_for_foobar
evenmoreinfo_for_foobar
@Name_2_Date_Place
foobar2
info_for_foobar2
evenmoreinfo_for_foobar2
到目前为止我所拥有的:
我能够得到文件B中与文件A中的名称对应的名称的顺序。所以我想在这里使用一个while循环,它遍历文件B的每一行,然后查找并替换相应的子字符串在包含该行的文件A中,但是我不确定如何将其放入bash脚本中。
到目前为止我的代码是,但是没有提供所需的输出:
grep '@' fileA.txt > fileAname.txt
while read line
do
replace="$(grep '$line' fileB.txt)"
sed -i 's/'"$line"'/'"$replace"'/g' fileA.txt
done < fileAname.txt
有人有想法吗?
提前致谢!
答案 0 :(得分:0)
您可以使用此脚本执行此操作:
awk 'NR==FNR {str[i]=$0;i++;next;} $1~"^@" {for (i in str) {if(match(str[i],$1)){print str[i];next;}}} {print $0}' B.txt A.txt
答案 1 :(得分:0)
这个awk应该适合你:
awk 'FNR==NR{a[$0]; next} {for (i in a) if (index(i, $0)) $0=i} 1' fileB fileA
@Name_1_Date_Place
foobar
info_for_foobar
evenmoreinfo_for_foobar
@Name_2_Date_Place
foobar2
info_for_foobar2
evenmoreinfo_for_foobar2