Linux数据流处理技巧
创建基于当前日期的文件
mkdir result-$(date +%F) //生成result-2019-08-28格式的文件
把一个命令的输出结果嵌入另一个命令里
``等价于$() 把要引用的值的命令放在``或$()内
grep -c '^>' maize.fa
echo "this file total have `grep -c '^>' maize.fa` sequence.
echo "this file total have $(grep -c '^>) maize.fa` sequence.
程序前后台运行
&
nohup
screen
mv test1 test2 &
程序后台运行
程序运行后,按下CTRL+Z暂停程序,可以用如下的命令分别置程序于后台或前台运行。
bg %1
进程1后台运行
fg %1
进程1前台运行
或者是nuhup
nuhup会向标准输出流的文件前面加上nohup的log信息,有些后续程序在运行nohup挂起的输出文件时,可能会因为头部的多余信息而报错
screen
screen是新开的屏幕,可以把screen挂起到后台继续运行
常规程序pipeline
echo analysis start at $(date +%x_%X) #输出程序开始的时间
mkdir programe_result-$(date +%F) #创建格式为程序名+日期格式的文件
nohup porgrame 2>./result-$(date +%F)/error-`date +%X` & #后台运行程序,同时将错误输出流重定向到上面新建的文件,以error+时间来命名。
程序的进程控制用于链式编程
&&
前一个执行成功后,再执行后一个程序。
||
前一个执行失败后,再执行后一个程序。
ls -l nide.xs && find -a "^>" mide.fa ##前一个程序成功就执行后续命令
cd test || mkdir test ##前一个命令执行错误时,执行后一个命令。
例1:如果想把工作目录移到运行环境的result目录,如果不存在则创建该目录
cd result || mkdir result && cd result
例2:如果执行某个命令出错,则报出错误位置信息。
samtools -sort index.fa || echo "error in samtools"
time命令
time command1
完整的命令例子:
nohup time java -jar picard.jar test 2>error-`date +%F &`
nohup挂起程序 time计算程序运行时间 2>error-`date +%F` 错误信息重定向
路径尽量使用相对路径
相对路径.
或..
开头的路径
绝对路径/
或字符开头的路径
使用断点
Python里面是assert()
,而R里面是 stopifnot()
使用正则表达式
例如当前目录有以下文件,
├── NS-1.map.sam
├── NS-2.map.sam
├── NS-3.map.sam
├── WT-1.map.sam
├── WT-2.map.sam
└── WT-3.map.sam
ls -lh {NS,WT}-{1..3}.map.sam
可以匹配到当前目录所有的文件。
数字命名
使用数字时尽量使用01,001代替1
每个程序要写文档
注意文档应该包括以下内容: - 程序功能、运行目录 - 命令的所依赖的程序或包,以及对应的版本 - 作者信息、日期 - 脚本的每一步尽量加上注释信息 - 在readme中说明运行目录的文件结构,自定义的特殊的文件需要说明数据类型
变量或函数命名
- 函数命名尽量结合功能进行命名
- 命名格式尽量统一,驼峰命名(UesrName)或者下划线命名(user_name).根据项目组或者团队或者个人习惯统一使用一种命名法。 个人偏向下划线命名法
- 变量和函数的命名的字符尽量不要太长