首先,我不是程序员,而是化学家。我开始做量子化学计算,我需要处理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
这样的事情能实现吗?非常感谢!
发布于 2017-05-19 10:12:21
短awk解决方案:
假设文件有内容:
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
命令:
awk -v RS="\\" '$0~/^HF=/{sub("\n","",$0); print}' file
产出:
HF=-4237.9263963
HF=-39 18.0496979
-v RS="\\"
--考虑\
作为记录分隔符$0~/^HF=/
-如果一行以所需的前缀HF=
开头sub("\n","",$0)
-删除行中可能的换行符发布于 2017-05-19 10:07:19
这应该就够了
grep -o 'HF=[^\\]*' file
-o
只返回匹配的部分(而不是整行)。
[^\\]
是一个排除反斜杠的字符类。
https://stackoverflow.com/questions/44067115
复制相似问题