두 개의 입력 파일을 입력으로 사용하여 Linux에서 bash 루프를 실행할 수 없습니까?

두 개의 입력 파일을 입력으로 사용하여 Linux에서 bash 루프를 실행할 수 없습니까?

Bash 스크립팅을 처음 접하면서 프로그램이 100개의 다른 파일에서 실행되도록 자동화하는 스크립트를 만들었습니다. 누구든지 스크립트를 수정할 수 있습니까? 한 디렉토리에는 모든 파일에 공통적으로 적용되는 접미사 *_R1_sic.fast 및 *_R2_sic.fast가 포함된 1~100개의 파일이 있습니다.

#!/bin/bash
set -e
 
for i in *_R*_sic.fast
do
   SAMPLE=$(echo ${i} | sed "s/_R1_\sic.fast//" | sed "s/_R2_\sic.fast//")
   echo ${SAMPLE}_R1_sic.fast
   echo ${SAMPLE}_R2_sic.fast
time /home/cent/anaconda3/envs/cot_env/bin/cot_cpp cot -k 25 -l 100 -p /home/cent/data/dy_samples/gz/trim/bssp/dat_files/${SAMPLE}_R1_sic.fast /home/cent/data/dy_samples/gz/trim/bssp/dat_files/${SAMPLE}_R2_sic.fast -o /home/cent/data/dy_samples/gz/trim/bssp/dat_files/${SAMPLE}_R_001_trimo25p_shat -t 5 -u 5 -g 150 -m 150G > ${SAMPLE}_R_001_trimo25p_shat_log
done

답변1

당신은 아마 이것을 원할 것입니다 :

dat_files=/home/cent/data/dy_samples/gz/trim/bssp/dat_files
cot_bin=/home/cent/anaconda3/envs/cot_env/bin

for r1 in *_R1_sic.fast; do
    sample=${r1%_R1_sic.fast}      # trim the _R1... suffix
    r2=${sample}_R2_sic.fast       # add the _R2 suffix
    if [[ -f $r2 ]]; then
        out=${sample}_R_001_trimo25p_shat
        cot_args=(
            -k 25 
            -l 100 
            -p "$dat_files/$r1" "$dat_files/$r2" 
            -o "$dat_files/$out"
            -t 5
            -u 5 
            -g 150 
            -m 150G
        )
        time "$cot_bin/cot_cpp" cot "${cot_args[@]}" > "${out}_log"
    fi
done

관련 정보