首先,我对shell脚本还比较陌生。我想知道是否有人可以帮助我在bash脚本中创建“步骤”。例如,我想运行一个分析,然后让脚本使用在第一个分析中生成的输出文件进行下一个分析。
因此,例如,下面的脚本将生成输出文件“ filt_C2”:
./sortmerna --ref ./rRNA_databases/silva-arc-23s-id98.fasta,./index/silva-arc-23s-id98.db:./rRNA_databases/silva-bac-23s-id98.fasta,./index/silva-bac-23s-id98.db:./rRNA_databases/silva-euk-18s-id95.fasta,./index/silva-euk-18s-id95.db:./rRNA_databases/silva-euk-28s-id98.fasta,./index/silva-euk-28s-id98.db:./rRNA_databases/rfam-5s-database-id98.fasta,./index/rfam-5s-database-id98.db:./rRNA_databases/rfam-5.8s-database-id98.fasta,./index/rfam-5.8s.db --reads ~/path/to/file/C2.fastq --aligned ~/path/to/file/rrna_C2 --num_alignments 1 --other **~/path/to/file/filt_C2** --fastx --log -a 8 -m 64000
此步骤完成后,我想运行另一个步骤,该步骤将使用生成的输出文件“ filt_C2”。我已经为每个步骤创建了多个bash脚本;但是,如果我可以在一个bash文件中执行每个步骤,则效率会更高。因此,有没有一种方法可以使脚本完成第1步,然后使用第1步生成的文件移至第2步?任何提示将非常感谢。谢谢!
答案 0 :(得分:2)
欢迎使用bash脚本!
以下是一些提示:
~/path/to/file
替换为另一个变量(例如WORKDIR)以保持一致性和灵活性。例如,假设您将脚本命名为print_analysis.sh
:
#!/bin/bash
# print_analysis.sh
# Written by Nikki E. Andrzejczyk, November 2018
# Set variables
WORKDIR=~/path/to/file
# Stage 1: Generate filt_C2 using SortMeRNA
./sortmerna --ref ./rRNA_databases/silva-arc-23s-id98.fasta,./index/silva-arc-23s-id98.db:./rRNA_databases/silva-bac-23s-id98.fasta,./index/silva-bac-23s-id98.db:./rRNA_databases/silva-euk-18s-id95.fasta,./index/silva-euk-18s-id95.db:./rRNA_databases/silva-euk-28s-id98.fasta,./index/silva-euk-28s-id98.db:./rRNA_databases/rfam-5s-database-id98.fasta,./index/rfam-5s-database-id98.db:./rRNA_databases/rfam-5.8s-database-id98.fasta,./index/rfam-5.8s.db \
--reads "$WORKDIR/C2.fastq" \
--aligned "$WORKDIR/rrna_C2" \
--num_alignments 1 \
--other "$WORKDIR/filt_C2" \
--fastx --log -a 8 -m 64000
# Stage 2: Process filt_C2 to generate result_C2
./stage2 "$WORKDIR/filt_C2" > "$WORKDIR/result_C2.txt"
# Stage 3: Print the result in result_C2
less "$WORKDIR/result_C2.txt"
请注意我如何使用反斜杠\
,以便将长sortmerna
命令拆分为多个较短的行,并使用#
进行可读的注释。
如上所述,仍然有改进的空间,但是在本快速示例中尚未实现,但是希望该快速示例向您展示如何扩展bash脚本并使其一次执行多个步骤。
Bash实际上是一种非常强大的脚本和编程语言。要了解更多信息,您可能想从Bash教程开始,如下所示:
希望这会有所帮助!如果您还有其他问题,或者我误解了您的问题,请随时提问!
干杯
安东尼