bash 루프를 통해 sed 처리를 사용하여 두 개의 입력 파일을 읽는 방법은 무엇입니까?

bash 루프를 통해 sed 처리를 사용하여 두 개의 입력 파일을 읽는 방법은 무엇입니까?

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

관련 정보