如何使用awk严格控制文件中的区域?
我有一个很长的文本文件,我需要在这个大的文本文件中提供一个表来进行计算,所以我试图限制区域并只打印我需要的表。我关心的区域如下所示:如何使用awk严格控制文件中的区域?,awk,Awk,我有一个很长的文本文件,我需要在这个大的文本文件中提供一个表来进行计算,所以我试图限制区域并只打印我需要的表。我关心的区域如下所示: Sums of squares of residuals for separate curves, including only individual weights Curve No. of obs. Sum of squares 1 82 0.20971070 2 7200 136
Sums of squares of residuals for separate curves, including only individual weights
Curve No. of obs. Sum of squares
1 82 0.20971070
2 7200 13659.50038631
3 7443 15389.87972458
4 5843 10510.37305696
5 290 49918.40634886
6 1376 49974.57509390
7 694 8340.44771461
8 545 2476.43037281
9 349 1425.69687357
1111 1111 0101110 01110 11001 01111 11110 0 1 1 0.100D-02
UNWEIGHTED OBSERVATIONAL EQUATIONS
No. Curve Input Param. Correction Output Param. Standard Deviation
9 0 39.6398000000 0.0796573846 39.7194573846 0.6864389887
我试过了,但所有的文件都打印出来了
/Curve/ { in_f_format=0; next }
/UNWEIGHTED/ { in_f_format=1; next }
{print}
期望输出
1 82 0.20971070
2 7200 13659.50038631
3 7443 15389.87972458
4 5843 10510.37305696
5 290 49918.40634886
6 1376 49974.57509390
7 694 8340.44771461
8 545 2476.43037281
9 349 1425.69687357
更新:根据您想要的输出,您可以使用:
awk '/Curve/ { in_f_format=1; next } /^[[:space:]]*$/ { in_f_format=0; next } in_f_format'
如果您只需要两种模式之间的内容,请将代码更改为:
/Curve/ { in_f_format=1; next }
/UNWEIGHTED/ { in_f_format=0; next }
in_f_format {print}
块之前的内容被视为条件,当条件的计算结果为true
,则将执行它之后的块。默认情况下,将执行没有条件的块(当未被
next
或其他内容跳过时)。此外,没有块的条件将隐含
{print}
,因此可以保存在此处
例如,文件
,其中包含您提供的内容:
$ awk '/Curve/ { in_f_format=1; next } /UNWEIGHTED/ { in_f_format=0; next } in_f_format' file
1 82 0.20971070
2 7200 13659.50038631
3 7443 15389.87972458
4 5843 10510.37305696
5 290 49918.40634886
6 1376 49974.57509390
7 694 8340.44771461
8 545 2476.43037281
9 349 1425.69687357
1111 1111 0101110 01110 11001 01111 11110 0 1 1 0.100D-02
另一个示例,从曲线标题行开始到空行之前:
$ awk '/Curve/ { in_f_format=1; } /^[[:space:]]*$/ { in_f_format=0; next } in_f_format' file
Curve No. of obs. Sum of squares
1 82 0.20971070
2 7200 13659.50038631
3 7443 15389.87972458
4 5843 10510.37305696
5 290 49918.40634886
6 1376 49974.57509390
7 694 8340.44771461
8 545 2476.43037281
9 349 1425.69687357
默认情况下,未分配变量具有0
或空值,其计算结果为false
[[:space:][]*
用于有空格字符的行,如果严格来说您想要空行,那么只需/^$/
,其中^
表示行开始,$
表示行结束。非常感谢。我没有注意到,在一个原始的大文件中,这个表后面也是字符串“Curve”。是否有可能限制以/Curve/{in_f_format=1;next}
开始并以空行结束的区域,在本例中,空行紧跟在第9行之后?@LukášAltman删除此块中的next
,并在其他块的条件下更改正则表达式即可。i、 e.将/UNWEIGHTED/
更改为/^[:space:]*$/
awk'NF==3&&$1~/^[0-9]/'文件