ファイルの行にファイル名を追加します。

ファイルの行にファイル名を追加します。

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

gawk4.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

関連情報