Обновление: в соответствии с вашим желаемым выходом, вы можете использовать это:
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
Другой пример, начиная с Кривая строки заголовка и до пустой строки:
$ 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:]]*
* * * * * * * * * * * * * *1026* * * * * * * *1026* для строк, содержащих пробелы, если вы хотите строго говоря пустую строку, то просто /^$/
, где ^
означает начало строки, а $
означает конец строки.