빅데이터 분석을 위해 수천 개의 파일을 반복하고 계시나요?

빅데이터 분석을 위해 수천 개의 파일을 반복하고 계시나요?

저는 bash 스크립팅 초보자입니다. 누구든지 도와주실 수 있나요?

  • 디렉토리( )에 파일 목록( ) pamlfiles/이 있습니다 .*.fa
    OG0018053.fa
    OG0018054.fa
    OG0018055.fa
    
  • 파일은 다음과 같습니다.
    head -n 2 ../pamlfiles/*
    ==> ../pamlfiles/OG0018053.fa <==
    >C.rhe
    ATGAGG------------GTCCTCCTGCTTCTCGGATTGGTGGCTTTTGGCCTGGCTGAC
    
    ==> ../pamlfiles/OG0018054.fa <==
    >L.fab
    atg---------------------acggacgagatatctctggcgtgtggcatgtcagga
    
    ==> ../pamlfiles/OG0018055.fa <==
    >A.ven
    ATGAACACTGCCACTCCCACCGAGTTTGACTTCTCTTTCTTGGAAGAGGGCTTCTCCGCC
    
  • 다음 스크립트( )를 사용하여 처리합니다 forloop.sh.
    #!/bin/bash
    for file in ../pamlfiles/*.fa
    do
        filename=$(basename -- "$file")
        gene_name="${filename%%.*}"
        cp codeml_0_opt1_templ.ctl codeml_0.ctl
        sed -i -e "s/GENE/$gene_name/g" codeml_0.ctl
        codeml codeml_0.ctl
    done
    

그러나 실행하면 forloop.sh오류가 발생합니다.

Sequence file ../pamlfiles/OG0018055 not found!

다음과 같습니다 codem1_0_opt1_templ.ctl.

head codeml_0_opt1_templ.ctl 
seqfile = ../pamlfiles/GENE
outfile = results/GENE_M0.txt
treefile = OG0018055.fa.m.fa.mt.py.nex.treefile
 
noisy = 9
verbose = 0 

runmode = 0
seqtype = 1  
CodonFreq = 2

내가 어디서 잘못됐나요?

답변1

codem1프로세스의 출력 (그게 무엇이든)을 보면 파일을 찾을 수 없다는 내용이 표시됩니다 OG0018055. 이는 파일이 실제로 호출되므로 논리적일 뿐입니다.OG0018055.fa

스크립트에서 .fa파일 이름 줄의 확장자를 제거 할 수 있습니다.

gene_name="${filename%%.*}"

유전자 이름을 알아보세요. 그런 다음 sed파일 템플릿의 모든 패턴 발생을 해당 유전자 이름으로 바꿀 수 있습니다 . GENE그러나 이는 업데이트된 codeml_0.ctl파일에서 해당 seqfile행이 다음과 같다는 것을 의미합니다.

seqfile = ../pamlfiles/OG0018055

따라서 .fa여기에는 확장이 없습니다.

따라서 템플릿 파일을 수정하여 읽으십시오.

seqfile = ../pamlfiles/GENE.fa

이렇게 하면 .fa파일 확장자가 손실되지 않습니다.

관련 정보