打击如何过滤输入文件

问题描述 投票:0回答:1

我有一个很大的文件,其中包含许多不必要的东西,需要将其过滤掉。所以让我感到有趣的事情是这样的:

 iteration # 20     ecut=    36.00 Ry     beta=0.10
 Davidson diagonalization with overlap
 ethr =  4.07E-13,  avg # of iterations =  3.8

 total cpu time spent up to now is   351441.3 secs

 End of self-consistent calculation

 Number of k-points >= 100: set verbosity='high' to print the bands.

 highest occupied, lowest unoccupied level (ev):     2.2896    4.1062

好,所以我需要计算:Bg = ELUMO-EHOMO,而ELUMO和EHOMO是最高和最低占用值。问题是我想要这样的输出:

Iteration #<number>
Bg=xxx

我的2个问题:1。我可以通过'最高'-字符串grep,这样我就可以得到每一行:

 highest occupied, lowest unoccupied level (ev):     2.3005    4.0791

但是如何将变量设置为最高和最低空闲水平?

2。因为不是每次迭代都给我未占用级别的值(然后我想跳过它),所以我应该如何grep /查找到始终具有迭代次数和未占用级别?

linux bash physics
1个回答
0
投票

我会用cut。

highest occupied, lowest unoccupied level (ev):     2.3005    4.0791

与以上一行...

rawvar=$(grep "highest" | cut -d':' -f2)
prefix=$(grep "highest" | cut -d':' -f1)

number1=$(echo "${rawvar}" | tr -s ' ' | sed s'@^ @@' | cut -d' ' -f1)
number2=$(echo "${rawvar}" | tr -s ' ' | sed s'@^ @@' | cut -d' ' -f2)

echo "${prefix} ${number1} ${number2}"
© www.soinside.com 2019 - 2024. All rights reserved.