根据另一个文件中列出的匹配字符串替换文本文件列中的字符串

根据另一个文件中列出的匹配字符串替换文本文件列中的字符串

按照我上一个问题,我有多个文件集,因此我在列表上进行了 grep 操作,并想使用 grep file.txt 更改其他文件,例如我在此处粘贴三个文件文件 1

chr - seq1 NZ_JAHWGH010000010.1 0 60562 green_a4
chr - seq3 NZ_JAHWGH010000012.1 0 466573 green_a4
chr - seq5 NZ_JAHWGH010000013.1 0 125526 green_a4
chr - seq39 NZ_CAJGBF010000006.1 0 211154 green_a4
chr - seq40 NZ_CAJGBF010000007.1 0 199119 green_a4
chr - seq41 NZ_CAJGBF010000008.1 0 190934 green_a4
chr - seq42 NZ_CAJGBF010000009.1 0 178251 green_a4

我苦苦哀求

grep "NZ_JAHWGH" file.txt |awk '{print $3}' >file1.txt
grep "NZ_CAJGBF" file.txt |awk '{print $3}' >file2.txt

现在我想使用这个 grep 文件来更改许多不同的文件,其中仅提供 seq1 seq2 等 seq 信息。所以我想要的是使用 file1.txt 所有匹配的列表应该替换为 seq1 类似地使用第二个 grep 文件 file2.txt 我想将所有匹配模式替换为 seq2

例如,此处给出的文件可通过使用先前文件中的信息进行更改

seq3 19301 20914 fill_color=green_a0
seq1 16726 18337 fill_color=green_a0
seq5 167934 169650 fill_color=green_a0
seq42 200621 202367 fill_color=red_a0
seq41 160164 161903 fill_color=green_a0
seq40 31356 33104 fill_color=green_a0

改变应该如下

seq1 19301 20914 fill_color=green_a0
seq1 16726 18337 fill_color=green_a0
seq1 167934 169650 fill_color=green_a0
seq2 200621 202367 fill_color=red_a0
seq2 160164 161903 fill_color=green_a0
seq2 31356 33104 fill_color=green_a0

到目前为止我尝试过这个命令

for i in f2.txt; do grep -wf f1.txt $i|awk '{$1="seq1";print}'; grep -wf other.txt $i |awk '{$1="seq2";print}'; done

第二个是

grep -wf f1.txt f2.txt|sed -e 's/seq[0-9]*/seq1/g'

感谢您的帮助谢谢

相关内容