Awk在文本字符串之间提取数据块

Awk在文本字符串之间提取数据块,awk,Awk,我再次与awk进行斗争,因为我从日志文件中取出了数据。我的日志文件所涉及的区域如下所示,但在该块的上方和下方有几千行: 4C*DJ - (B-C)*DJK + 2*(2A+B+C)*D1 - 4*(4A+B-3C)*D2 = 0 Value = 0.5293955920D-22 Alpha Matrix in cm-1 Axis Mode Inertia Coriol. Anharm. Total x 1 -0.37699D-0

我再次与awk进行斗争,因为我从日志文件中取出了数据。我的日志文件所涉及的区域如下所示,但在该块的上方和下方有几千行:

4C*DJ - (B-C)*DJK + 2*(2A+B+C)*D1 - 4*(4A+B-3C)*D2 = 0
Value =     0.5293955920D-22

Alpha Matrix in cm-1
Axis Mode    Inertia        Coriol.        Anharm.        Total
x    1   -0.37699D-03   -0.36413D-02    0.10830D-01    0.68121D-02
x    2   -0.83656D-03   -0.53163D-02    0.14483D-01    0.83306D-02
x    3   -0.15253D-02   -0.10512D-01    0.20064D-01    0.80264D-02
x    4   -0.17103D-03   -0.73492D-03    0.14953D-01    0.14047D-01
x    5   -0.96312D-03   -0.11748D-01    0.15825D-02   -0.11128D-01
x    6   -0.46095D-03   -0.94225D-02    0.44165D-02   -0.54669D-02
x    7   -0.26926D-01   -0.10167D-01    0.29406D-01   -0.76866D-02
x    8   -0.17827D-02   -0.21079D-01    0.74564D-02   -0.15405D-01
x    9   -0.55840D-02    0.84897D-01   -0.29596D-02    0.76354D-01
x   10   -0.50287D-24    0.36312D-01   -0.44078D-02    0.31904D-01
x   11   -0.48777D-24   -0.63320D-01    0.18876D-02   -0.61432D-01
x   12   -0.35364D-24    0.42877D-01    0.62352D-03    0.43500D-01
y    1   -0.23141D-05   -0.13777D-03    0.53278D-03    0.39270D-03
y    2   -0.62128D-05   -0.87905D-04    0.36602D-03    0.27190D-03
y    3   -0.55613D-05   -0.33722D-04    0.28874D-03    0.24946D-03
y    4   -0.47995D-04   -0.60863D-03    0.17426D-02    0.10860D-02
y    5   -0.36076D-04   -0.20493D-03    0.12026D-03   -0.12075D-03
y    6   -0.12725D-03   -0.61930D-03   -0.15830D-03   -0.90485D-03
y    7   -0.19917D-03   -0.55423D-04    0.10520D-02    0.79740D-03
y    8   -0.48978D-03   -0.13733D-02    0.54899D-03   -0.13141D-02
y    9   -0.11432D-02    0.62058D-03   -0.20074D-04   -0.54272D-03
y   10   -0.16078D-24    0.20852D-02   -0.88466D-04    0.19967D-02
y   11   -0.63877D-25    0.18274D-03   -0.13682D-03    0.45922D-04
y   12   -0.43257D-25    0.92039D-03   -0.61669D-03    0.30370D-03
z    1   -0.69174D-07   -0.23737D-03    0.59290D-03    0.35547D-03
z    2   -0.60773D-05   -0.18704D-03    0.53271D-03    0.33960D-03
z    3   -0.46425D-05   -0.29722D-03    0.57403D-03    0.27217D-03
z    4   -0.22234D-04   -0.47670D-03    0.15748D-02    0.10759D-02
z    5   -0.20254D-04    0.24124D-03    0.11848D-03    0.33947D-03
z    6   -0.42788D-04    0.99264D-04   -0.40246D-04    0.16230D-04
z    7   -0.10941D-03    0.30020D-03    0.13135D-02    0.15043D-02
z    8   -0.19997D-03    0.32196D-03    0.54501D-03    0.66699D-03
z    9   -0.20819D-03    0.45666D-03   -0.67765D-04    0.18071D-03
z   10   -0.55249D-25    0.00000D+00   -0.14491D-03   -0.14491D-03
z   11   -0.55828D-26    0.00000D+00   -0.69139D-04   -0.69139D-04
z   12   -0.26265D-26    0.00000D+00   -0.45200D-03   -0.45200D-03

Vibro-Rot alpha Matrix (cm-1)
            a(z)           b(x)           c(y)
Q( 1)        0.00681        0.00039        0.00036
我需要从(在本例中)“x1-0.37…”到“z12-0.262…”提取数据

如果我能让awk将数据提取到某个已知点,我就可以对文件进行头尾跟踪。我有大约300个这样的文件,每个文件都有不同的行数,所以我不能只计算行数,但它们都以“轴模式惯性…”开始,以“振动旋转alpha矩阵”结束

我目前正在尝试使用:

awk '$1=="Axis"&&$2=="Mode"{t=1};t;/[0-9]+ "Vibro-Rot alpha Matrix"/{exit}' file.log
它用于获取文件的开头(尽管它包含我可以随后切断的头)。但是awk命令的结尾部分不起作用。我试图用^Vib/{exit}和其他东西来结束它,但似乎没有任何效果,当我这样做时,我只得到了几千行日志文件

我确信这很重要,在文件顶部的“axis”之前和底部的“Vibro Rot”之前都有一个空格。尽管“$1==”轴“&&&$2==”模式“部分似乎并不关心单个空白

在有“Vibro Rot alpha矩阵”的线条出现之前,我还缺少什么

提前谢谢

Ben

尝试以下方法:

awk '!NF{p=0}p; /Axis Mode/{p=1}' file.log
-- 使用您的原始方法: 那么:

awk '/Vibro-Rot alpha Matrix/{exit}t; $1=="Axis"&&$2=="Mode"{t=1}' file.log
这对我很有用:

awk '$1 == "Axis" && $2 == "Mode" {t = 1;} $1 == "Vibro-Rot" && $2 == "alpha" && $3 == "Matrix" {t = 0;} t == 1 && NF == 6 {print $0}' file.log
如果不需要标题,请尝试:

awk '$1 == "Vibro-Rot" && $2 == "alpha" && $3 == "Matrix" {t = 0;} t == 1 && NF == 6 {print $0} $1 == "Axis" && $2 == "Mode" {t = 1;}' file.log
嗯?使用grep:

egrep "^x|^y|^z" yourfile

当我运行该命令时,会得到“NF:Event not found”。我的mac电脑是不是太迟钝了,awk版本不好?请使用单引号,而不是双引号,否则
bash
的历史扩展将产生干扰(它解释
(感叹号))。您的
awk
版本是BSD awk,它很好。。如果您仍然有问题,可以使用
NF==0
而不是
!NF
@user3246787:请看上文,这两种方法都非常有效!我觉得我两个都试过了,但我显然把事情搞砸了。非常感谢!