9. 《Bioinformatics Data Skills》之Unix Shell

由于Unix Shell的2大哲学思想模块化重定向,其成为生物信息学家常用的工作环境。

  • 模块化
    指的是一个程序只做好一件事情,然后将程序使用管道连接起来。

好处:

  1. 容易定位错误或BUG
    如果使用一大段代码处理完发现最终结果出问题,可能要画很长的时间去找哪里出问题了。模块化之后容易检查是哪一块出问题了。
  2. 容易测试与更换模块
    当你觉得一个模块有更好的处理方式时,可以很容易地进行测试与更换。
  3. 可以采用特定的工具或者语言
    例如Python擅长比较复杂的处理,R擅长数据分析,整个流程可以在不同的模块采用不同的语言进行针对性的处理。
  4. 可重用
    将已经存在的模块进行重新组合可以用来解决新的问题。
  • 重定向

好处:
生物信息的文本数据量可以非常大,正常打开会消耗大量的内存与时间。重定向可以在不读取数据到内存的情况下进行处理,可以节省磁盘与内存空间,增加速度。


我们首先来谈一谈重定向的使用方式

标准化输出重定向

cat可以将文件内容传输到标准化输出流,可以将单个文件或者多个文件重定向输出(没有重定向输出的话将打印在屏幕上)

cat tb1-protein.fasta
>teosinte-branched-1 protein
LGVPSVKHMFPFCDSSSPMDLPLYQQLQLSPSSPKTDQSSSFYCYPCSPP
FAAADASFPLSYQIGSAAAADATPPQAVINSPDLPVQALMDHAPAPATEL
GACASGAEGSGASLDRAAAAARKDRHSKICTAGGMRDRRMRLSLDVARKF
FALQDMLGFDKASKTVQWLLNTSKSAIQEIMADDASSECVEDGSSSLSVD
GKHNPAEQLGGGGDQKPKGNCRGEGKKPAKASKAAATPKPPRKSANNAHQ
VPDKETRAKARERARERTKEKHRMRWVKLASAIDVEAAAASVPSDRPSSN
NLSHHSSLSMNMPCAAA                          
cat tb1-protein.fasta tga1-protein.fasta
>teosinte-branched-1 protein
LGVPSVKHMFPFCDSSSPMDLPLYQQLQLSPSSPKTDQSSSFYCYPCSPP
FAAADASFPLSYQIGSAAAADATPPQAVINSPDLPVQALMDHAPAPATEL
GACASGAEGSGASLDRAAAAARKDRHSKICTAGGMRDRRMRLSLDVARKF
FALQDMLGFDKASKTVQWLLNTSKSAIQEIMADDASSECVEDGSSSLSVD
GKHNPAEQLGGGGDQKPKGNCRGEGKKPAKASKAAATPKPPRKSANNAHQ
VPDKETRAKARERARERTKEKHRMRWVKLASAIDVEAAAASVPSDRPSSN
NLSHHSSLSMNMPCAAA
>teosinte-glume-architecture-1 protein
DSDCALSLLSAPANSSGIDVSRMVRPTEHVPMAQQPVVPGLQFGSASWFP
RPQASTGGSFVPSCPAAVEGEQQLNAVLGPNDSEVSMNYGGMFHVGGGSG
GGEGSSDGGT

可以采用这种方式将多个文件内容合并为单个文件

cat tb1-protein.fasta tga1-protein.fasta > zea-proteins.fasta
ls -lrt
total 40
-rwxr-xr-x 1 way way   152 May 27 15:23 tga1-protein.fasta
-rwxr-xr-x 1 way way  1874 May 27 15:23 tb1.fasta
-rwxr-xr-x 1 way way   353 May 27 15:23 tb1-protein.fasta
-rwxr-xr-x 1 way way  1471 May 27 15:23 resources.md
-rwxr-xr-x 1 way way 28125 May 27 15:23 README.md
-rw-r--r-- 1 way way   505 May 27 16:16 zea-proteins.fasta

注:

  • shell的输出重定向符号为>>>,前者会覆盖已存在的文件内容而后者会在已存在的内容后面追加。两者都会在文件不存在的情况下创建新文件。
  • ls -lrt的参数说明:l表示以列表形式展示;r表示相反的顺序;t表示时间。将r去掉后最新的文件会出现在列表最上方。

标准化错误输出重定向

我们已经知道如何将标准化的输出重定向到屏幕或文件,而程序的错误,警告或者其它信息会直接显示在屏幕上(Fig.ab)。如果我们也想要记录这些信息作为log文件,该怎么做呢?

Figure 1. Unix输入输出流

答案是采用2>符号,举例来说,假如我们使用ls展示一个存在和另一个不存在的文件,会同时产生标准化输出与标准化错误输出:

ls tb1-protein.fasta lasjf
# ls: cannot access 'lasjf': No such file or directory
# tb1-protein.fasta

分别对标准化输出与标准化错误进行重定向:

ls tb1-protein.fasta lasjf > listing.txt 2> listing_error.txt
cat listing.txt
# tb1-protein.fasta
cat listing_error.txt
# ls: cannot access 'lasjf': No such file or directory

注:

  1. 采用2>的原因是在重定向里面, 0, 1, 2分别代表的是输入,标准化输出与标准化错误,不过很少采用1>作为标准化输出用法。
  2. 将错误重定向后错误将不会输出在屏幕上面,如果想要在屏幕上追踪的话可以使用tail -f ,文件内容增加后会显示出来

标准化输入

linux的标准化输入为<,使用方式:
program < inputfile > outputfile
但是这种方式不直观,并不常用,常用的方式是通过管道:
cat inputfile | program > outputfile

你可能感兴趣的:(9. 《Bioinformatics Data Skills》之Unix Shell)