我想提取该张量的对角线数:
*********** Symmetrised Stress Tensor ***********
* *
* Cartesian components (GPa) *
* --------------------------------------------- *
* x y z *
* *
* x 3.832865 0.000000 0.000000 *
* y 0.000000 3.832865 0.000000 *
* z 0.000000 0.000000 3.922869 *
* *
* Pressure: -3.8629 *
* *
*************************************************
为此,我尝试了以下方法
sed -n 's/.*\* *x *\([0-9.-]*\).*/\1/p' file1 >> x_component.txt
但是,由于这些张量中有几个,因此这给了我file1中所有可能的匹配项。而且我只想要最后一个匹配项(只希望最后一个张量的x分量)。
所需的输出是:
3.832865
在x-component.txt文件中
3.832865
在y-component.txt文件等中
答案 0 :(得分:2)
您需要使用sed吗?
awk '$1 == "*" && $2 == "x" {v=$3} END {print v}' input
如果必须使用sed,将其通过管道传输到仅打印最后一行的第二个实例可能会更容易:
< input sed -n '/^\* *x */s///p' | sed -n '$s/ .*//p'
(在这里作弊,做一些简化的假设,并使用第二个sed仅获得第一列。)
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed -E '/^\s*\*\s*x\s*(\S+).*/{s//\1/;h};$!d;x' file
将x
值存储在保留空间中,并交换到文件末尾的保留空间。
答案 2 :(得分:0)
Williams帖子的另一种形式。
而不是打印找到的最新内容,而是打印编号为3
awk '$1=="*" && $2=="x" && $3~/[[:digit:]]/ {print $3}' file
3.832865