学习专题:一些基础的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脚本和服务器指令的主要内容,如果未能解决你的问题,请参考以下文章