01.fasta、02.fastaなど、さまざまなサンプルのfastaファイルがあります。
これには、すべて次のパターンのOTUのリストが含まれています。
>OTU1
CCTACGGGCGGCTGCAGT
>OTU2
CCTACGGGTGGCTGCAG
以下>OTU*
を受け取るために、fastaファイルの各行にファイル名(例:01、02など)を追加したいと思います>OTU1_01
。>OTU2_01
フォルダ内のすべてのファイルに対して自動的にこれを実行するスクリプトを書くのに役立ちますか?
答え1
すべてのファイルの変更を開始する前に、ファイルをバックアップしたことを確認してください。
次のコマンドを実行できます。
for i in *.fasta; do nr="${i%.fasta}"; sed -i 's/^>OTU\(.*\)$/>OTU\1_'$nr'/' "$i"; done
sed
-i
(所定の位置で編集)をサポートするバージョンがある場合。
このnr="${i%.fasta}"
部分はファイル名から番号を取得します。\(.*\)
次の番号を一致させて>OTU
再挿入してください。\1
答え2
gawk
4.1.0以降、内部編集オプションが利用可能になりました。だから一度に入りました。
awk -i inplace -v INPLACE_SUFFIX=.bak '
BEGINFILE{x=FILENAME; sub(/\..*/, "", x)};
/^>OT/{$0 =$0"_"x};
{print}' *.fasta
必要に応じてファイルが内部で更新されます。元のファイルにサフィックスを-v INPLACE_SUFFIX=.bak
付けてバックアップします。.bak