【发布时间】:2019-09-17 10:52:56
【问题描述】:
我正在尝试使用 bash 脚本获取输出文件的特定部分,但我不知道如何继续。首先,我需要的数据在\HF=和第一次出现另一个\.之间的值用逗号隔开,但有时中间有换行符。我需要的是 grep 所有这些值并将它们发送到一个只包含它们的新文件,每行一个。
我的输出文件示例:
...\HF=-56.876868,-56.2343,-42.
343,-67.3453423,-85.74656,-
45.864\...
我尝试使用grep -Pzo,但我不知道如何使用它。
如前所述,一个值可以分为两行:
...-90.80
234,...
而且它必须被认为是同一个数字。有时只有减号在上面一行,其余的数字在下一行:
...,-
56.656,...
来自Gaussian的输出示例:
433513773\H,-0.5821679865,0.6475216708,0.9536248473\H,-0.7834605038,0.
4523031701,2.780055657\\Version=ES64L-G09RevD.01\HF=-156.0385049,-156.
312885,-156.0311709,-156.0310505,-156.0309275,-156.0308023,-156.030548
,-156.0304151,-156.0302832,-156.0301504,-156.0300168,-15,8492,84298484
.0385128\RMSD=4.113e-09,3.064e-09,3.538e-09,3.945e-09,9.452e-09,9.542e
-09,9.805e-09,9.877e-09,9.916e-09,2.730e-09,3.175e-09,3.077e-09,3.301e
我需要的文件示例
-156.0385049
-156.312885
-156.0311709
-156.0310505
-156.0309275
-156.0308023
-156.030548
-156.0304151
-156.0302832
-156.0301504
-156.0300168
-156.84928429
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
是的,但值是介于 \HF= 和单个反斜杠 \ 之间
-
另外,您是否有理由不使用
tr -d '\r\n'来批量消除换行符? -
我使用的:sed -z 's/\n //g' gaussian.log | grep -Po '\\HF=\K[^\]*' | tr ',' '\n' >the_file_i_need.out
-
很抱歉,我的错。我正在打开旧版本的输出,我创建的名称彼此相似。现在它是 100% 工作。感谢您的帮助