跳转至

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).根据项目组或者团队或者个人习惯统一使用一种命名法。 个人偏向下划线命名法
  • 变量和函数的命名的字符尽量不要太长
回到页面顶部