首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用grep、awk或sed在多行上搜索和导出模式

使用grep、awk或sed在多行上搜索和导出模式
EN

Stack Overflow用户
提问于 2017-05-19 10:03:53
回答 2查看 39关注 0票数 0

首先,我不是程序员,而是化学家。我开始做量子化学计算,我需要处理1米长的文件中的数据。我试过这里找到的解决方案,但没有一个符合需要。问题是,计算的输出文件如下所示

43718,0.0040389517,-1.7885800013,-0.6239343718,-0.0040389517\Versi on=AM64L-G09RevD.01\State=13-AU\HF=-4237.9263963\S2=43.283985\S2-1=0.\ S2A=42.176337\RMSD=5.586e-09\RMSF=2.812e-05\Dipole=0.,0.,0.\Quadrupole

或者这个

63732,-2.373882,2.364348\C,0,1.172319,-2.404467,3.15907\La,0,1.953277,0.,0.la,0,-1.953277,0.,0.\Version=AM64L-G09RevD.01\State=1-AG\HF=-39 18.0496979\RMSD=3.915e-09\Dipole=0.,0.,0.\Quadrupole=12.1772596,-7.248

参数用反斜杠除以,但可以在两条线上分开。我要找的是脚本,它会找到HF=XXXX.XXXXX并打印出来。对于上面的两个例子,它应该找到并打印

HF=-4237.9263963 HF=-3918.0496979

这样的事情能实现吗?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-19 10:12:21

awk解决方案:

假设文件有内容:

代码语言:javascript
运行
复制
43718,0.0040389517\Am,-1.7885800013,-0.6239343718,-0.0040389517\\Versi
on=AM64L-G09RevD.01\State=13-AU\HF=-4237.9263963\S2=43.283985\S2-1=0.\
S2A=42.176337\RMSD=5.586e-09\RMSF=2.812e-05\Dipole=0.,0.,0.\Quadrupole
63732,-2.373882,2.364348\C,0,1.172319,-2.404467,3.15907\La,0,1.953277,
0.,0.\La,0,-1.953277,0.,0.\\Version=AM64L-G09RevD.01\State=1-AG\HF=-39
18.0496979\RMSD=3.915e-09\Dipole=0.,0.,0.\Quadrupole=12.1772596,-7.248

命令:

代码语言:javascript
运行
复制
awk -v RS="\\" '$0~/^HF=/{sub("\n","",$0); print}' file

产出:

代码语言:javascript
运行
复制
HF=-4237.9263963
HF=-39 18.0496979
  • -v RS="\\" --考虑\作为记录分隔符
  • $0~/^HF=/ -如果一行以所需的前缀HF=开头
  • sub("\n","",$0) -删除行中可能的换行符
票数 1
EN

Stack Overflow用户

发布于 2017-05-19 10:07:19

这应该就够了

代码语言:javascript
运行
复制
grep -o 'HF=[^\\]*' file

-o只返回匹配的部分(而不是整行)。

[^\\]是一个排除反斜杠的字符类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44067115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档