xargsを使用してls出力を別のコマンドにリダイレクトする

xargsを使用してls出力を別のコマンドにリダイレクトする

私が作業しているディレクトリには、次の拡張子を持つ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.bamieとを生成する必要があります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

私の考えでは、このスタイルは、後であなたや他の人があなたのスクリプトを誤って見つけたときに何をしたいのかを明確にします。

おすすめ記事