生信log

生信Log32|NEXTFLOW资源统计bash脚本知识统计一览

2023-03-11  本文已影响0人  小周的万用胶囊

生信Log32|NEXTFLOW资源统计脚本知识点一览——生信bash进阶学习材料

文前唠叨,这篇断断续续写了好久啊,最近开始看一些流程搭建的相关知识和软件,最早接触的是snakemake,但仅跟着大佬玩过一下教学视频的demo,对此并没有深入的理解。最近因自己的懒癌犯了,不想一遍又一遍地敲那些重复的命令行就开始接触流程的东西。Nextflow是我接触到的比较满意的流程工具,这次尝试站在开发者的角度去理解。本篇记录的是研究nextflow --with-trace这个功能实际执行脚本所学到的内容。在分析和尝试读懂这个脚本的过程中,我还发现了很多软件的编写使用的是高级语言,但实际运行的过程当中,机器执行的是高级语言生成的bash脚本。最后啰嗦一句,这个脚本串起了很多linux的知识点,不失为一个进阶学习linux bash/shell/系统知识的集成范例。题外话,我经常思考学会这个了,but what's next。

0、思路

一句话总结就是ALL ABOUT LINUX的文本信息获取

pid_目录.png cpu_stats.png

1、NEXTFLOW资源统计脚本知识统计一览

涉及到的主要内容有以下(当然这只是其中几个大块内容):

2、Nextflow资源统计的脚本设计思路一览

脚本目的:计算脚本执行时消耗的资源(获取集群计算节点运行的信息)

脚本主要执行步骤:

  1. 打开文件(所幸linux不需要像python那样把文件打开关)
  2. 读取内容(如何将读取到的内容存放到内存中,涉及到全局/局部变量和数组的构建)
  3. 对获取到的数据进行统计(不同系统存在差异,条件的判断)
  4. 将结果写入到对应的文件中(文件内容重定向)

3、知识点一览(更多内容查阅linux shell手册大全)

#函数的基本结构
function function_name {
    your func
}
#如何在脚本中定义局部变量使用local

function function_name{
    local test=test
}
#全局变量只需在函数外部写即可
global_var="anything"

#如何获取外部参数并读到function中, 用$1-$9的位置获取外部参数,$1代表第一个位置上的参数 
e.g bash hello_world.sh output_dir
output_dir=$1
function function_name {
    your_command $1
}
#如何在bash中进行条件的判断及分支的基本结构(回文结构)

if [ condition ]
then 
    #做点事情
    do XXX
else
    #干其他事情
    do XXX

fi
# while判断
while condition
do 命令
done
#用双括号进行条件判断,如双括号判断路径中是否存在文件等
if [[ -f 文件名 ]]

#cat、awk、read
content=$(cat file_name)
#awk
content=$(awk '{print')
#read经常与while连用,用于逐行读取文本的内容
while read line
do echo $line
done < input_file

#构建数组
array=(0 0 0)
#输出到指定文件
cat file > another_file
#追加输出到某文件
cat file >> another_file
#重定向输入,这种结构能让脚本变得简介和更容易理解,而且避免了管道的输入
while read line
do echo $line
done < input_file

#如何将不输出脚本标准错误,1通常为脚本正常的输出内容,2一般是平时屏幕上的报错信息
echo 2>/dev/null

#如何得知自己是在什么系统上是linux还是macos
uname

#如何获取命令/指令运算后的值:用$(命令) 的方式完成
system=$(uname)
echo $system

#如何获取脚本/文件的名字(主要用在有绝对路径的文件上)
filepath=/Users/User/control.sh
basename $filepath
output: script.sh
#用basename命令去掉文件后缀
basename -s .sh doc_name.sh
output: doc_name

#如何获取路径(主要用在有绝对路径的文件上)
filepath=/Users/User/control.sh
dirname $filepath
/Users/User/

#如何获取脚本的PID号
bash hello_world.sh &
PID=$!
echo $PID

总结


PS:在此跟大家推荐一本教材叫《Linux命令行与shell脚本编程大全》。对于新手来说,尽快上手代码项目并参考理论书籍,学习效果会更好。

参考

nextflow
linux proc手册

《Linux命令行与shell脚本编程大全》

上一篇 下一篇

猜你喜欢

热点阅读