오류는 다음과 같습니다.
merge_star.sh: line 19: syntax error near unexpected token `('
merge_star.sh: line 19: `cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt'
문제의 .sh 스크립트에 있는 줄은 다음과 같습니다.
cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt
#!/bin/bash
# create header file
echo gene_name $(cd ~/asn_project/alignment_sorted && ls *_ReadsPerGene.out.tab | sed s/_ReadsPerGene.out.tab// | sort -u) > ~/asn_project/alignment_sorted/tmp/header.txt
# Place each sample's STAR gene count file - ReadsPerGene.out.tab in the tmp/ directory
# The 2nd column (-f2) of ReadsPerGene.out.tab contains the non-stranded counts
for sample in $(cd ~/asn_project/alignment_sorted && ls *_ReadsPerGene.out.tab | sed s/_ReadsPerGene.out.tab// | sort -u)
do
echo ${sample}
cat ~/asn_project/alignment_sorted/${sample}_ReadsPerGene.out.tab | tail -n +5 | cut -f2 > ~/asn_project/alignment_sorted/tmp/${sample}.count
done
# get a list of gene ids (-f1)
tail -n +5 ~/asn_project/alignment_sorted/N_1_ReadsPerGene.out.tab | cut -f1 > ~/asn_project/alignment_sorted/tmp/geneids.txt
# combine all the columns of the count files
paste ~/asn_project/alignment_sorted/tmp/geneids.txt ~/asn_project/alignment_sorted/tmp/*.count > ~/asn_project/alignment_sorted/tmp/tmp.out
# add the header
cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt
# remove the tmp folder
rm -rf ~/asn_project/alignment_sorted/tmp
저는 .sh 스크립트 코딩을 처음 접했는데 어떤 오류를 수정해야 하는지 모르겠습니다. 도움을 주시면 감사하겠습니다.
답변1
댓글에서당신은 말한다을 사용하여 이 스크립트를 실행하고 있습니다 sh merge_star.sh
. 이는 sh
스크립트를 실행하는 데 을 사용하고 있음을 의미 하지만 첫 번째 줄( #!/bin/bash
)은 bash
일부 시스템에서는 동일하지만 다른 시스템에서는 다릅니다. sh
다음 bash
을sh
포함한 일부 비 POSIX 기능입니다. 5.0 이하) 프로세스 교체( <(...)
). 따라서 올바른 쉘과 올바른 호출을 사용하는 것이 매우 중요합니다.
사용 bash merge_star.sh
하거나심지어 더 좋은 건, 스크립트를 실행 가능하게 만든 chmod a+x merge_star.sh
다음( ) 직접 실행( ./merge_star.sh
)