gromacs 中shell 编写自动脚本-用到grep、awk、sed

管道符的使用

[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linuxprobe ~]# free -m | grep Mem: | awk ‘{print $4}’
582
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk ‘{print $4}’
[root@linuxprobe ~]# echo $FreeMem
582

grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

sed 中替换字符串
sed ‘s/原字符串/替换字符串/’ filename
sed ‘2s/原字符串/替换字符串/’
替换第二行
sed ‘ s / 原 字 符 串 / 替 换 字 符 串 / ′ 替 换 最 后 一 行 若 添 加 了 g , 代 表 替 换 文 本 中 出 现 的 所 有 匹 配 字 符 串 , 否 则 只 替 换 第 一 次 出 现 的 s e d 中 替 换 变 量 . e v a l s e d ′ s / s/原字符串/替换字符串/' 替换最后一行 若添加了g,代表替换文本中出现的所有匹配字符串,否则只替换第一次出现的 sed 中替换变量 . eval sed 's/ s///gsed.evalseds/a/ b / ′ f i l e n a m e . s e d " s / b/' filename . sed "s/ b/filename.sed"s/a/ b / " f i l e n a m e . . s e d ′ s / ′ b/" filename . .sed 's/' b/"filename..seds/a’/' b ′ / ′ f i l e n a m e . . s e d s / b'/' filename . .sed s/ b/filename..seds/a/$b/ filename

自己用到的是第二种

sed -i "2s/$pronum/$comnum/" complex.gro
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦! 
pronum=`sed -n '2p' $protein.gro`

或者是

pronum=$(sed -n '2p' complex.gro)

将第二行的内容赋值给pronum变量
这里` 是Esc下面的那个字符,一定要注意

sed 中在匹配的变量后面添加多行,并且有转义字符,用到反斜杠

sed -i -e "$hang a \; Include ligand topology\n#include \"$ligname.itp\" " topol.top

shell 中变量相加,shell 中所有变量默认为字符串,所以变量相加需要

comnum=`expr $lignum + $pronum`

或者用(())

grep 命令

Linux grep 命令用于查找文件里符合条件的字符串。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep “被查找的字符串” 文件名
-n 显示行号

-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。

grep -n "CONECT" -B 1 $ligname.pdb | head -1 > lignum.txt

显示CONECT匹配行及它之前的一行内容,管道符代表只显示第一行,并存到lignum.txt

linux awk命令
awk是三个创始人的首字符
把lignum中第二列的数字赋值给lignum

lignum=$(awk '{print $2}' lignum.txt)
hang=$(grep -n "endif" topol.top | head -1 | awk -F: '{print $1}')

三个命令混合起来的一个用法

ps aux | grep sbin | awk '{print $2}' | sed -n '1,3p'

匹配sbin 第二列并且是1到3行的

### Linux 在科学研究中的应用 #### 1. 数据处理与分析工具 Linux 提供了丰富的命令行工具,这些工具非常适合数据科学家和研究人员进行高效的数据处理。例如 `awk` 和 `sed` 可以用来快速解析文本文件;而像 `grep` 则能帮助查找特定模式的内容[^1]。 ```bash # 使用 awk 处理 CSV 文件并计算某一列的平均值 awk -F',' '{sum += $2; count++} END {print sum/count}' data.csv ``` #### 2. 科学计算环境搭建 对于从事数值模拟、物理建模等领域研究的人来说,在 Linux 上安装配置强大的开源科学库变得异常简单。Anaconda 是一个广受欢迎的选择,它包含了众多 Python 库以及 R 语言的支持包,能够满足大多数科研需求[^2]。 ```bash # 安装 Anaconda 发行版 wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh bash Anaconda3-2020.11-Linux-x86_64.sh ``` #### 3. 并行计算支持 许多高性能计算机集群运行着基于 Linux 的操作系统。MPI (Message Passing Interface) 是实现分布式内存架构上程序间通信的标准协议之一。通过 MPI 编程模型可以充分利用多核处理器的优势来加速复杂算法求解过程。 ```c // C 语言下的简单 MPI 程序示例 #include <mpi.h> int main(int argc, char *argv[]) { int rank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("Hello from process %d\n", rank); MPI_Finalize(); } ``` #### 4. 开源软件生态系统 得益于庞大的开发者社区贡献,围绕 Linux 形成了一个庞大且活跃的应用生态体系。无论是生物信息学还是天文学等各个学科方向都有相应的高质量免费资源可供利用。比如 GROMACS 用于分子动力学仿真;PLINK 对基因型数据集执行全基因组关联研究(GWAS)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值