学习专题:一些基础的shell脚本和服务器指令

Posted VG生信软件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习专题:一些基础的shell脚本和服务器指令相关的知识,希望对你有一定的参考价值。

shell进阶

写脚本需要记得模块化和可重复性

This is the Unix philosophy:  Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. —Doug McIlory

shell脚本模块化的特点:

  • 容易trouble shooting

  • 针对特定模块可以替换不同方法,比如找差异表达基因,简单的衡量标准就是foldchange,复杂的就有R包等等,灵活机动

  • 同样地,我们也可以用不同编程语言实现我们的目的

  • 模块化的代码可以复用

了解shell

1.可以使用 echo $0 / echo $SHELL 看看当前使用的shell脚本,适合bioinformatics的shell是zshell


2.重定向:充满了美感和速度(Speed and Beauty in One)

  • 标准输出 >, 脚本后跟 2>list.strerr重定向错误

  • 标准输入 < 一般被忽略,很多时候可以用 |替换


3.脚本流程的交互和终止:hangup/kill

  • &跟在脚本后面可以在后台挂起(background process),需要保持运行shell的开启。可以用 jobs查看

  • 通过 ps查看当前shell运行的程序,找到pid ,用 kill pid终止挂起的程序

  • 用 echo $?查看上一脚本运行是否正常,脚本间可以用 && 或 || 连用,使短循环成立,感觉在脚本循环的时候特别有用

  • nohup: 可以用于长时间运行脚本或程序


4.通配符(wildcards)和括号在指令替换里的简单应用

  • echo"There are $(grep -c '^>' input.fasta) entries in my FASTA file."这里$()获得了grep得到的信息,然后输出到echo的内容中

  • mkdir results-$(date+%F) 创建特定日期的目录


5.little tricks

  • alias 的妙用: aliastoday="date +%F",当前环境下today就可返回日期,用于各种文件和日志的命名,如 mkdir results-$(today)

Unix Data Tools(前部)

善用unix/linux内置函数(Unix staples)而不是大段代码(其实是一切从简的原则?),大段代码维护成本很高,传播也不容易。这一部分可以说是生信数据分析的核心。

那么何时使用,如何合适地使用pipeline呢,先以文本处理为例讲起(今后的学习其实也一直贯穿着这种思维)。

1.Text类型的数据

  • 在生物信息数据范围主要有 bed, gtf/gff. SAM, tabular BLAST, VCF 多数以tab键分隔

    • 查看类:head/tail/less

    • 提取类:grep提取某个字段/cut提取某列/awk结合前两者,有更强大的功能

    • 整合类:column整列/sort用于排序/join合并列

  • 简单例子

    用tab整理数据格式:

  •  > beforeafter

    grep -B / grep -A 分别是before和after 用grep 找到的那行

    sort-k1,1V-k2,2nexample2.bed通过在k后面加V可以将第一列字符串中的数字按照数字大小而不是字符格式排序,很有用(如染色体排序)

    sort+ uniq找到文本中unique字符串


2.查看文件格式 生信数据多是以ASCII编码的,可以用128个字符(7bit)代表质量,主要包括大小写字母、数字和特殊不可见的字符。

  • 可以用 file查看文件格式 hexdump

服务器相关(remote machines)

1.用ssh链接远程服务器

  • 简单使用 ssh username@host,可以配置~/.ssh/config命名host, port

以上是关于学习专题:一些基础的shell脚本和服务器指令的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本基础学习(转)

SHELL脚本编程基础

第九章shell脚本编程基础

Linux-shell脚本基础

shell脚本基础命令学习

shell基础之shell相关概念