
bash 스크립트 목록을 생성하려면 여기에 설명된 두 변수를 사용해 보세요. 이 문제가 있습니다. 두 변수를 스크립트에 올바르게 넣을 수 없으며 출력 파일의 파일 이름(파일이 하나만 있음)이 입니다. cut_cat.sh
기본적으로 코드는 함수가 아닌 cat 텍스트로 해석됩니다. 어떻게 하면 이를 개선할 수 있나요?
이것은 bash 쉘 환경에 있습니다. 운영체제는 레드햇 리눅스이다.
입력 파일에는 다음이 R2_adaptor
포함됩니다 Sample_ID:CGATATTCG
(전반은 샘플 ID, 후반은 삭제할 시퀀스). 그들은 서로 분리되어 있습니다 :
.
for n in cat ${FA_PATH}/R2_adaptor;
do first=$(echo $n | cut -d ":" -f 1)
second=$(echo $n | cut -d ":" -f 2)
cat <<- EOF > ${SCRIPTS}/cut_${first}.sh
#!/bin/bash
FA_PATH="/home/xxx/test_files"
cutadapt -a TTCCTCCT -A echo ${second} --cores=14 \
-o ${FA_PATH}/${first}_R1_trim.fastq.gz \
-p ${FA_PATH}/${first}_R2_trim.fastq.gz \
${FA_PATH}/${first}_R1_001.fastq.gz ${FA_PATH}/${first}_R2_001.fastq.gz
EOF
done
${FA_PATH}/R2_adaptor
다음은 파일의 예입니다.
Sample2:AGAAGTTT
Sample3:TTGGATAT
Sample4:GTAGTATT
Sample5:ATATATAT
Sample6:AACTTGGC
Sample7:GATGGTGA
Sample8:GTCCCTAT
답변1
자세한 내용을 전혀 알려주지 않으셨기 때문에 많은 부분이 추측입니다.생각하다${FA_PATH}/R2_adaptor
파일 이름으로 확장됩니다 .생각하다당신이 원하는 것은 파일의 내용을 반복하는 것입니다. 이는 아마도 당신이 찾고 있는 것이 임을 의미합니다 for n in $(cat ${FA_PATH}/R2_adaptor)
.
그러나 한 줄에 문자열이 하나만 있는 경우에는 이것이 작동하지만이게 낫다while
이와 같은 작업을 수행하려면 루프를 사용하는 데 익숙해져야 합니다 .
다시 한 번 입력 파일에 다음과 같이 로 구분된 두 개의 문자열이 있는 것 같습니다 :
.
ACTTGCTATAGCGAT:CGATATTCGGCGATAT
그렇다면 다음과 같이 할 수 있습니다.
#!/bin/bash
FA_PATH="/home/xxx/test_files"
SCRIPTS="/path/to/scripts"
while IFS=: read -r first second rest_if_any_ignored; do
cat <<- EOF > "${SCRIPTS}"/cut_"${first}".sh
#!/bin/bash
cutadapt -a TTCCTCCT -A '${second}' --cores=14 \
-o '${FA_PATH}/${first}_R1_trim.fastq.gz' \
-p '${FA_PATH}/${first}_R2_trim.fastq.gz' \
'${FA_PATH}/${first}_R1_001.fastq.gz'
'${FA_PATH}/${first}_R2_001.fastq.gz'
EOF
done < "${FA_PATH}"/R2_adaptor
문자열만 있고 어댑터 시퀀스를 제거해야 하기 때문에 echo
from 도 제거했습니다 .-A echo $second
echo
-A