
私が作業しているディレクトリには、次の拡張子を持つ2つのファイルがあります.sam
。
PD180425_aligned_minimap.sam
PD180793_aligned_minimap.sam
これら2つのファイルのそれぞれに対して、次のコマンドを適用する必要があります。
samtools view -Sb pattern.sam > pattern.bam
私はこのような目的に使用しようとしていますxargs
。私が望むのは、前のプレフィックスをキャプチャ_aligned_minimap
し、それを使用して私の出力に保存することです。私が試したことは次のとおりです。
ls *.sam | cut -d "_" -f 1 | xargs -i samtools view -Sb {}_aligned_minimap.sam > {}_aligned_minimap.bam
PD180425_aligned_minimap.bam
ieとを生成する必要がありますPD180793_aligned_minimap.bam
。コマンドは実行中ですが、{}_aligned_minimap.bam
作業中のディレクトリにファイルが作成されていることがわかります。これは、xargs(PD180425
および)を使用してPD180793
キャプチャする入力が「」であることを示します。働かない
どうすればいいですか?
答え1
私が好む方法は次のとおりです。
for SAM_FILE in *.sam; do
samtools view -Sb "$SAM_FILE" > "${SAM_FILE/sam/bam}"
done
たとえば、ライナーにすることができます。
for SAM_FILE in *.sam; do samtools view -Sb "$SAM_FILE" > "${SAM_FILE/sam/bam}"; done
これは、パラメータ拡張を使用して出力ファイル拡張子を変更します。 https://wiki.bash-hackers.org/syntax/pe
私の考えでは、このスタイルは、後であなたや他の人があなたのスクリプトを誤って見つけたときに何をしたいのかを明確にします。
答え2
for
私のコマンドは少し修正されました。ループよりもシンプルで簡潔だと思います。
ls *.sam | cut -d "_" -f 1 | xargs -I {} bash -c " samtools view -Sb {}_aligned_minimap.sam > {}_aligned_minimap.bam"