여기 문서에는 두 가지 변수가 있습니다.

여기 문서에는 두 가지 변수가 있습니다.

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 

문자열만 있고 어댑터 시퀀스를 제거해야 하기 때문에 echofrom 도 제거했습니다 .-A echo $secondecho-A

관련 정보