エラーは次のとおりです。
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
)