如何解决使用 awk 仅从第一个实例获取信息
我正在使用 awk 从包含 300 个输出文件的目录中获取数据。
我想提取的大部分相关信息都是这种格式:
a bunch
of text
TOTAL ENERGY: 1234
a bunch
of text
not the same in
any way
DISPERSION COEFF: 5678
.
.
.
偶极矩除外,它看起来像:
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
此外,无论出于何种原因,偶极矩在文件中出现两次,与上述相同。信息完全相同。 我想从这个文件中提取总偶极矩。 我有一个脚本正在运行,可以得到这个:
awk '/Dipole Moment: \[D\]/{found=1; next} found{print $NF; found=""; next} *.out
但是,我得到了两条相同偶极矩的线。
1.我该如何避免这种情况?
其次,我想在列中排列所有这些信息。我有一种方法可以处理排列整齐的属性,例如总能量和分散系数。 这是我的脚本:
awk '/DISPERSION CORRECTION ENERGY/ {dee=$NF; next} /TOTAL ENERGY/{print $NF,dee;}' *.out
我得到的输出看起来像
5678 1234
但是,我无法在此表中排列偶极矩值。我应该如何解决这个问题?
出于测试目的: file1.out:
a bunch
of text
TOTAL ENERGY: 1234
a bunch
of text
not the same in
any way
DISPERSION COEFF: 5678
.
.
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
.
.
.
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
file2.out:
a bunch
of text
TOTAL ENERGY: 4412
a bunch
of text
not the same in
any way
DISPERSION COEFF: 1111
.
.
Dipole Moment: [D]
X: 1.28 Y: 0.08 Z: 1.87 Total: 1.22
.
.
.
Dipole Moment: [D]
X: 1.28 Y: 0.08 Z: 1.87 Total: 1.22
所需的输出:
1234 5678 1.6622
4412 1111 1.22
解决方法
这样的事情应该做你想做的事(使用 GNU awk nextfile
):
awk '
FNR == 1 { delete f; inDipole=0 }
{ f[$1" "$2] = $NF }
inDipole { print f["TOTAL ENERGY:"],f["DISPERSION COEFF:"],$NF; nextfile }
/Dipole Moment:/ { inDipole = 1 }
' file{1,2}
1234 5678 1.6622
4412 1111 1.22
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。