Bash初心者の私は、すべての* .txtファイルを繰り返し、* .txtをPerlスクリプトへの入力として扱う小さなスクリプトを作成しました。
単一ファイルを入力として使用
#!/bin/bash
set -e
for i in *.txt
do
SAMPLE=$(echo ${i} | sed "s/.txt//")
echo ${SAMPLE}.txt
time /home/sunn/data/softwares/evaluation/msa/pal2nal.v14/pal2nal.pl ${SAMPLE}.txt -output paml > ${SAMPLE}.paml.txt
done
Perlスクリプトを実行する実際のコマンド(入力ファイル2個)
pal2nal.pl OG0012884_out.fa OG0012884_out.txt -output paml > OG0012884_paml.txt
入力として2つのファイルがありますか?当たった…
#!/bin/bash
set -e
for i in *.txt
do
SAMPLE=$(echo ${i} | sed "s/.txt//" | "s/.fa//")
echo ${SAMPLE}.txt
time /home/sunn/data/softwares/evaluation/msa/pal2nal.v14/pal2nal.pl ${SAMPLE}.fa ${SAMPLE}.txt -output paml > ${SAMPLE}.paml.txt
done
答え1
変数を複数回使用するだけです。
を呼び出す必要はなく、sed
パラメータ拡張を使用して拡張を削除することもできます。
for txt in *_out.txt ; do
sample=${txt%.txt}
out=${sample%_out}
pal2nal.pl "$sample".fa "$sample".txt -output paml > "$out"_paml.txt
done
他のファイルが存在することを確認する機能を追加できます。
if [[ ! -e $sample.fa ]] ; then
echo "$sample.fa missing, skipped." >&2
continue
fi