Data라는 폴더에 25개의 관련 파일 쌍이 있습니다. 파일 이름은 내가 도달할 때까지 (또는 내가 가지고 있는 파일 쌍 수) . , 및 등으로 tcr1_r1.txt
지정 됩니다. 내 문제는 이들을 쌍으로 연결하고 배치 파일의 각 쌍에 대해 명령을 실행해야 한다는 것입니다. 예:tcr1_r2.txt
tcr2_r1.txt
tcr2_r2.txt
tcr25…
주문하다 tcr1_r1.txt tcr2_r2.txt 주문하다 tcr2_r1.txt tcr2_r2.txt
어떻게 해야 하나요? 루프를 생각하고 있지만 각 명령에서 파일을 분리하고 교체할 수 없는 것 같습니다. 중첩 루프를 시도했지만 각 "r1" 파일과 모든 "r2" 파일만 실행됩니다.
for filename1 in /Data/*_r1.txt
do
for filename2 in /Data/*_r2.txt
do
echo "$filename1 and $filename2"
done
done
나는 사용해 보았습니다.제프 샬러의 답변. 내가 시도한 정확한 쉘 파일 라인은 다음과 같습니다.
#!/bin/bash
for first in /mnt/data/Sequencing_core/Data/Raw_data/062419_TCRB_Vanessa_Danielle/20190624_FS10000703_3_BPC29606-1232/Alignment_1/20190625_132145/Fastq/*R1_001.fastq.gz
do
echo "$first"
echo "${first/_R1_001.fastq.gz/_R2_001.fastq.gz}"
done
제가 뭔가를 놓치고 있는 것 같아요. "교체 오류" 오류 메시지가 나타납니다.
답변1
총 파일 수에 관심을 두는지 여부에 따라 두 가지 방법이 있습니다.
첫 번째 방법으로 파일 수가 25개(구체적으로 1~25개)라는 것을 알 수 있습니다.
for index in {1..25}
do
command tcr"${index}"_r1.txt tcr"${index}"_r2.txt
done
위에서 (bash) 쉘은 {1..25}
전체 숫자 세트로 확장됩니다. 그런 다음 해당 숫자를 쌍으로 된 파일 이름의 적절한 위치로 바꿉니다.
두 번째 방법은 파일이 몇 개 있는지 모르거나 신경쓰지 않는 것입니다.
for first in tcr*_r1.txt
do
command "$first" "${first/_r1.txt/_r2.txt}"
done
위에서는 모든 "r1" 파일을 반복하고 "_r2.txt" 쌍을 "_r1.txt" 부분으로 바꿉니다.
답변2
그냥 사용할 수 있습니다xargs
:
echo /Data/*_r[12].txt | xargs -n 2 the-command