来源: “码农不会写诗”公众号
书回正文
强大的Linux命令能够有效提升工作效率,今天让我们来感受下Linux在利用Lamms进行ReaxFF模拟时都能带来那些便利。
1 Linux命令介绍
在正式开始之前再介绍几个会用到的命令和知识点
01 ln (创建软链接)
软链接类似于windows中的快捷方式
ln -s work/test.txt test.txt # 为./work/test.txt创建软链接为test.txt
ls -l test.txt
lrwxrwxrwx 1 reaxff reaxff 13 Apr 14 22:09 test.txt -> work/test.txt
02 | (管道符)
将左边命令的结果,作为右边命令的输入
如下,cat查看/etc/services文件的内容,然后管道符|将输出结果送给grep作为其输入,然后grep从中过滤出包含echo字符的内容。
cat /etc/services | grep echo # 此例等价于grep echo /etc/services
echo 7/tcp
echo 7/udp
echo 4/ddp # AppleTalk Echo Protocol
03 /mnt (WSL下挂载window文件)
WSL将Windows下的资源挂载在/mnt路径下,因此为了访问Windows下的文件,可通过cd命令直接去/mnt/目录下操作。
ls /mnt/ # 查看都有那些盘挂载
c d e f g
但为了在WSL中更直接更方便也更安全的处理Windows下的文件,可以利用上文讲到的ln命令,只将需要用到的文件链接到WSL方便操作的目录下即可。如先在Windows的D盘下创建work/reaxff的文件夹,然后创建软链接,如下:
mkdir -p work
cd work
ln -s /mnt/d/work/reaxff .
ls -l reaxff # 箭头指向文件原始位置
lrwxrwxrwx 1 reaxff reaxff 19 Apr 14 22:24 reaxff -> /mnt/d/work/reaxff/
各位朋友们,正文开始啦~
2 Linux命令分析species.out文件
利用Lammps跑过ReaxFF MD模拟的朋友们都了解,利用 reax/c/species 命令可以生成包含分子片段的文件,本文命名为species.out文件。该文件包含输出Timestep下的分子片段的种类和数量,但也需要进一步处理获取所需信息,本文将利用本系列已学linux命令进行简单处理。关于其详细处理本系列等后面还会有详细深入的介绍,敬请期待哦~
2.1 如何获取测试文件?
关注微信公众号:码农不会写诗
回复关键词:species
将拿到的文件(species.out)放到D盘下的work/reaxff文件夹
cd reaxff
ls -l # 可以看到文件已经同步到reaxff目录下了
species.out
查看文件(more species.out)可以发现,偶数行以#开头,为分子片段等信息,奇数行数字和偶数行每列对齐为其数量信息。
2.2 常用命令整理
以下纯纯纯干货,建议关注收藏食用
2.2.1 统计所有Timestep
查看species.out文件所有的Timestep
FILE=species.out; grep '^[0-9]' $FILE | awk '{print $1}' | xargs
2.2.2 统计某个Timestep的分子信息
查看某个Timestep的信息,如下为229000
TIEMSTEP=229000; FILE=species.out; grep $TIEMSTEP $FILE -B1
2.2.3 统计某Timestep下某分子片段的数量
查看某Timestep下某分子片段的数量,如下为查看229000下C2H4的数量
TARGET=C2H4; TIMESTEP=229000; grep $TIMESTEP species.out -B1 | tr -d '#' | awk -v TARGET="$TARGET" 'NR==1{INDEX=0; split($0, WS, " "); for(i=1; i<=length(WS); i++) {if (WS[i] == TARGET) {INDEX=i}} } NR==2{ if(INDEX==0) {print 0} else {print $INDEX} }'
2.2.4 统计所有Timestep下出现的所有分子片段
查看species.out文件中所有Timestep下出现的分子片段
FILE=species.out; awk '{ if(NR%2==1) {split($0, WS, " "); for(i=5; i<=length(WS); i++) {print WS[i]}}}' $FILE | sort | uniq | xargs
2.2.5 统计所有Timestep下某个分子片段的数量变化
查看species.out文件中所有Timestep下某分子片段的数量变化,如下为C2H4的数量变化。这里会换行输出每个Timestep下的数量,若想不换行输出,命令尾部添加【 | xargs】即可。
TARGET=C2H4; FILE=species.out; awk -v TARGET="$TARGET" '{ if(NR%2==0) { if(INDEX==0) {print 0} else {print $INDEX} } else {INDEX=0; split($0, WS, " "); for(i=1; i<=length(WS); i++) {if (WS[i] == TARGET) {INDEX=i-1}}}}' $FILE
通过以上方式稍加整理就可以分析分子数量的所有信息,感兴趣的朋友们在此基础上可以做的更自动更易用,也欢迎大家随机交流和反馈!
相信各位看官朋友无论是否会用到今天分享的相关命令,都能感受到linux命令的强大之处。对我来说,每次类似场景都会让我深感震撼,学海无涯苦作舟吧!今天就到这里啦,拜了个拜~