![bash 루프를 통해 sed 처리를 사용하여 두 개의 입력 파일을 읽는 방법은 무엇입니까?](https://linux55.com/image/14665/bash%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%ED%86%B5%ED%95%B4%20sed%20%EC%B2%98%EB%A6%AC%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%BD%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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