forループを使用してスクリプト出力を単一のファイルとして保存する方法

forループを使用してスクリプト出力を単一のファイルとして保存する方法

次のように、fastaファイルからランダムに200のシーケンスを減算するのに役立ちました。

JQ086372.1 腸内細菌ファージ HK446、完全ゲノムTTTTTCACCTTAAA GGCTTCGGATTCACCGGGC TTG TAGGCCTGTC...(これはまだより多くのA、C、G、またはTに適用されます。)

これを使用してください:

< file.fasta tail -n+2 | tr -d '\n' > newfile

これ:

n=$(stat -c "%s" newfile)
r=$(shuf -i1-"$((n-200+1))" -n1)
< newfile tail -c+"$r" | head -c200

私が得た結果は次のとおりです。

ここでは、.faで終わる複数のファイルと一緒にこのスクリプトを使用し、forループを使用して各ファイルのランダムな200個のサブストリング出力を新しいファイルに保存したいと思います。これは、次の3つの.faファイルがある場合を意味します。 game.fa sport.fa food.fa

各.faファイルでランダムに200個のサブストリングを生成し、200個のサブストリング出力のみを含む新しいファイルを作成します。

game_200_subtring.fa sport_200_substring.fa food_200_substring.fa

おそらく非常に基本的な内容なので、あらかじめありがとうございます。

引用:fastaファイルからランダムな200文字のサブストリングを抽出する方法

ベストアンサー1

必要に応じて動作する必要があります。スクリプト自体に使用法情報を含めました。注:ソースファイルにアクセスできないため、このスクリプトの出力を確実にテストすることはできません。しなければならない働く

これは、単にスクリプトが実行されるディレクトリの「.fa」ファイルを繰り返し、各ファイルに提供されたスクリプトを実行して、「output」というサブディレクトリに各ファイルの新しいファイルを作成します。

#!/bin/bash
# Usage:
# Run this script from within the same directory as the .fa files.
# A subdirectory named 'output' will be created, in which every
# input file will have a corresponding output file, prefixed with 'seq.'
mkdir -p ./output
shopt -s nullglob
for f in *.fa
do
    nf="./output/seq.$f"
    echo "Copying sequence from '$f' to '$nf'"
    
    < $f tail -n+2 | tr -d '\n' > $nf

    n="$(stat -c "%s" $nf)"

    r="$(shuf -i1-"$((n-200+1))" -n1)"

    < $nf tail -c+"$r" | head -c200
done

おすすめ記事