他のファイルにリストされている一致する文字列に基づいてテキストファイル列の文字列を置き換える

他のファイルにリストされている一致する文字列に基づいてテキストファイル列の文字列を置き換える

前の質問によると、複数のファイルセットがあるので、リストをgrepし、grep file.txtを使用して他のファイルを変更したいと思います。たとえば、ここに3つのファイルを貼り付けます。

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に置き換える必要があります。同様に、2番目の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'

助けてくれてありがとう

ベストアンサー1

おすすめ記事