我有一个长文本文件,我需要为该大文本文件中的表提供计算,因此我试图限制区域并仅打印我需要的表。我关心的区域如下:
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
答案 0 :(得分:2)
更新:根据您想要的输出,您可以使用此:
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}
,因此可以在此处保存。
例如,file
包含您提供的内容:
$ 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
另一个示例,从 Curve 标题行到空行之前:
$ 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:]]*
用于具有空格字符的行,如果您要严格地说是空行,则只需/^$/
,其中^
表示行头,$
表示行尾。 / p>