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
입력으로 두 개의 파일이 있습니까? 때렸어...
#!/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