Awk在文本字符串之间提取数据块
我再次与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
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:请看上文,这两种方法都非常有效!我觉得我两个都试过了,但我显然把事情搞砸了。非常感谢!