![使用其他文件中的相同单词替换字符串](https://linux22.com/image/175065/%E4%BD%BF%E7%94%A8%E5%85%B6%E4%BB%96%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%90%8C%E5%8D%95%E8%AF%8D%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我正在编辑我的1.txt
文件,找到一个单词并将其替换为相应的单词,2.txt
并添加2.txt
.
我有兴趣维护我的文件的顺序1.txt
。
>title1
ID1 .... rest of string I'm not interested in
>title2
ID2 .... rest of string I'm not interested in
>title3
ID3 .... rest of string I'm not interested in
>title....
但我想添加我的信息2.txt
。
>ID1 text I want to extract
>ID2 text I want to extract
>ID3 text I want to extract
>IDs....
最后,我希望创建一个具有以下结构的新文件:
>title1
ID1 .... text I want
>title2
ID2 .... text I want
>title3
ID3 .... text I want
>title....
我已经尝试了几个 sed 命令,但大多数命令都没有完全替换两个文件中的 ID#。希望可以在 bash 中完成
感谢您的帮助
尝试失败..我的代码是文件 1 = cog_anotations.txt、文件 2=Real.cog.txt ID= COG05764、COG 015668 等...
sed -e '/COG/{r Real.cog.txt' -e 'd}' cog_anotations.txt
sed "s/^.*COG.*$/$(cat Real.cog.txt)/" cog_anotations.txt
sed -e '/\$COG\$/{r Real.cog.txt' -e 'd}' cog_anotations.txt
grep -F -f cog_anotations.txt Real.cog.txt > newfile.txt
grep -F -f Real.cog.txt cog_anotations.txt > newfile.txt
实线文件1
>Bravo_5
>CDD:223731 COG0658, ComEC, Predicted membrane metalbinding protein l
>Bravo_6
>CDD:223242 COG0164, RnhB, Ribonuclease HII [DNA replication,
>Bravo_7
>CDD:223778 COG0706, YidC, Preprotein translocase subunit YidC .
实线文件2
COG0006 E Xaa-Pro aminopeptidase
COG0706 J Glutamyl- or glutaminyl-tRNA synthetase
COG0164 J tRNA A37 threonylcarbamoyladenosine synthetase subunit
COG0012 J Ribosome-binding ATPase YchF, GTP1/OBG family
COG0013 J Alanyl-tRNA synthetase
答案1
和awk
awk 'NR==FNR{id[$1","]=$0}
NR!=FNR{f=$0; getline; if (id[$2]) print f RS id[$2]}' file2 file1
>Bravo_6
COG0164 J tRNA A37 threonylcarbamoyladenosine synthetase subunit
>Bravo_7
COG0706 J Glutamyl- or glutaminyl-tRNA synthetase
演练
id
使用所需文本加载数组并file2
添加,
以与其他文件匹配
awk 'NR==FNR{id[$1","]=$0}
在第二个文件中NR!=FNR
抓住第一行f
并跳转到第二个getline
NR!=FNR{f=$0; getline;
然后测试是否id
存在于您想要的数组中(id[$2])
并打印是否存在
if (id[$2]) print f RS id[$2]}' file2 file1