.txt
我的目录中有一堆文件,其中包含有关偶极矩的信息。它是这样的:
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
lorem ipsum
text
that is
not
relevant
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
more text
我想从这些文件中提取总偶极矩。我正在运行以下脚本:
awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;found=""}' *.txt > dipole_bma.txt
该脚本打印 1.6622 两次。每个文件中每隔一个Total
偶极矩两次。我看到它打印了两次,因为正则表达式在文件中出现了两次。
我的问题是,如何从每个文件中仅打印一次总偶极矩?
答案1
使用nextfile
陈述:
awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;nextfile;}' *.txt
答案2
Gnu sed 可以执行以下操作:
sed -ns '
/^Dipole Moment: \[D]/!d
$!N;/\n/s/.* //p;:n;n;bn
' ./*.txt
-s
选项(nonPosix)将文件视为单独的流。-n
将在获取下一条记录之前禁止模式空间的默认打印。- 在偶极矩线之后,我们将下一条线粘贴到图案空间。
- 删除直到最后一个空格(假设没有尾随空格),这会打印最后一个字段,即偶极矩的值。
- 然后我们滑到当前文件的末尾。对于下一个文件重复整个过程。