Удалите все строки между двумя шаблонами (исключая шаблон) с помощью sed или awk

У меня есть довольно большой выходной текстовый файл, в котором мне нужно удалить все строки между двумя шаблонами, но сохранить совпадение с шаблоном.

Файлы примерно похожи на следующий результат.

 TEST #1          
      coef1 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
      coef2 |  -50.08894   10.47335    -4.78   0.000    -70.61697   -29.56092
            |
  indicator |
         0  |   .6647992   2.646627     0.25   0.802     -4.55925    5.888849
         1  |   2.118701   5.225777     0.41   0.686     -8.19621    12.43361
            |
       year |
         2  |  -.4324005   2.231387    -0.19   0.847    -4.836829    3.972028
         3  |   -.362762    1.97184    -0.18   0.854    -4.254882    3.529358
            |
      _cons |   16.95753   6.342342     2.67   0.008     4.526383    29.38869
 TEST #2          
        coef2 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
        coef3 |  -50.08894   10.47335    -4.78   0.000    -70.61697   -29.56092
              |
         year |
           4  |   .6647992   2.646627     0.25   0.802     -4.55925    5.888849
           5  |   2.118701   5.225777     0.41   0.686     -8.19621    12.43361
              |
     idnumber |
           6  |  -.4324005   2.231387    -0.19   0.847    -4.836829    3.972028
           7  |   -.362762    1.97184    -0.18   0.854    -4.254882    3.529358
              |
        _cons |   16.95753   6.342342     2.67   0.008     4.526383    29.38869

Мне нужно взять следующий результат и удалить все строки между «year» и «_cons», но мне нужно сохранить строку, начинающуюся с «_cons». Желаемый результат выглядит так:

 TEST #1          
      coef1 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
      coef2 |  -50.08894   10.47335    -4.78   0.000    -70.61697   -29.56092
            |
  indicator |
         0  |   .6647992   2.646627     0.25   0.802     -4.55925    5.888849
         1  |   2.118701   5.225777     0.41   0.686     -8.19621    12.43361
            |
       year |
      _cons |   16.95753   6.342342     2.67   0.008     4.526383    29.38869
 TEST #2          
        coef2 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
        coef3 |  -50.08894   10.47335    -4.78   0.000    -70.61697   -29.56092
              |
         year |
        _cons |   16.95753   6.342342     2.67   0.008     4.526383    29.38869

Я написал следующий сценарий (под OS X):

sed '/^ +year/,/^ +_cons/{/^ +year/!{/^ +_cons/!d}}' input.txt >output.txt

, но я получил следующую ошибку:

sed: 1: "/^ +year/,/^ +_cons/{/^ ...": extra characters at the end of d command

Я не уверен, что этот подход вообще верен, потому что я не могу кажется, заставить sed выполнить. Подходит ли здесь sed или мне следует использовать awk?

И последнее замечание: мне нужен этот сценарий для работы с относительно общей установкой Unix. Я должен отправить это кому-то, кто должен выполнить это при очень простой (я думаю) установке AIX. Ни Perl, ни Python, и я не могу много устранять неполадки при их установке по электронной почте.

10
задан jaypal singh 14 January 2012 в 01:33
поделиться