2017-08-10 7 views
1

多くのファイルが同じディレクトリにあり、bashコマンド(.sam.bam)を使用して別のファイルに変換したいとします。私はこの小さなコマンドをbashで書いた。それは正常に動作しますが、問題はすべての結果ファイルが同じ名前を持ち、結果的にお互いを置き換え、最後には1つのファイルしか持たないということです。このコマンドをどのように変更すれば、それぞれ.samファイルごとに.bamファイルが得られるのか分かりますか?bashコマンドによるファイル変換

BAM_OUTDIR="bam_files" 
SAM_INDIR="sam_files" 

ls -1 ${SAM_INDIR}/*.sam | while read file; do 

    echo "conversion of sam to bam started ..................." 
    dn=$(dirname "$file"); 
    output="${BAM_OUTDIR}/alignment.bam"; 
    samtools view -Sb "${file}" > "${output}" 
done 
+0

あなたはファイル拡張子を変更したいと思います。ファイルの会話は別のアクションです(データ構造の変更を意味します) – reporter

+0

私は問題がここにあると思います:output = "$ {BAM_OUTDIR} /alignment.bam"; – john

答えて

0

私はbashのでfimliarないんだけど、年のUNIX管理者がファイル(勝つとその逆のUnix)で改行を変更することが私の例を与えた:

for i in `ls *.conf` 
do 
    unix2dos <$i >$i.new 
done 

だからここ架空の方法:

for i in `ls ${SAM_INDIR}/*.sam` 
do 
    samtools view -Sb <$i >${BAM_OUTDIR}/$i.bam 
done 
0

ます。また、これを試すことができます。

代わりに、出力LSを解析の
0
BAM_OUTDIR="bam_files" 
SAM_INDIR="sam_files" 
for file in $SAM_INDIR/*.sam; do 
    echo "conversion of sam to bam started ..................." 
    base=$(basename $file); 
    samtools view -Sb "${file}" > "${BAM_OUTDIR}/${base%.sam}.bam" 
done 

からdon't parse the output of ls - これは$ SAM_INDIR中* .SAMファイルのすべてを反復処理するためのシェルグロブを使用しています。次に、中間変数baseを使用して、$ SAM_INDIR部分なしで受信ファイル名を保持します。 samtoolsコマンドは、出力を$ BAM_OUTDIR内のファイルにリダイレクトします。このファイル名は、ベースファイル名の末尾にある ".sam"を削除し、 ".bam"を追加します。

関連する問題