захват номера шесть строк под шаблоном - PullRequest
3 голосов
/ 28 января 2012

Эти строки повторяются

                               FINAL RESULTS



    NSTEP       ENERGY          RMS            GMAX         NAME    NUMBER
    1000      -4.7910E+01     2.1328E-01     9.4193E-01     C          62

ФИНАЛЬНЫЕ РЕЗУЛЬТАТЫ показывают среднее значение этих значений для набора.Выходной файл объединяет все 1000 комплектов.Мне нужно взять число ниже энергии (-4,7910E + 01), все 1000 из них в другой файл.Мне нужно установить FINAL RESULTS как шаблон, потому что другие шаблоны, такие как NSTEP, ENERGY, RMS .... повторяются в миллионах.

Буду благодарен за любую помощь.

Ответы [ 4 ]

6 голосов
/ 28 января 2012

Что-то вроде этого должно работать для вас:

awk '/FINAL RESULTS/{for (i=0; i<5; i++) getline; print $2}' <filename>
3 голосов
/ 28 января 2012

ОК, я думаю, что теперь вижу.

awk 'found==1 { print $2; found=0 } $2=="ENERGY" { found=1 }' inputfile

Получит число ниже ENERGY независимо от того, сколько строк между ним и FINAL RESULTS.

0 голосов
/ 08 декабря 2013

С GNU grep (и некоторыми другими после его расширений) вы можете просто сделать что-то вроде grep -A 6 'FINAL RESULTS'

Так что это должно работать для Linux, и я вижу, что он работает на недавнем MacOS X иЯ почти уверен, что использовал его во FreeBSD.Так что это, вероятно, работает на большинстве форм UNIX, с которыми вы столкнетесь.(Если нет, установите пакет GNU "coreutils").

0 голосов
/ 29 января 2012

Это может работать для вас:

awk '/FINAL RESULTS/{f=1;p=0}{p++}f==1 && p==6{print $2}' file

Или, если вам нравится:

awk 'f==2 && p==1{print $2}{p++}/FINAL RESULTS/{f=1}/ENERGY/ && f==1{f=2;p=0}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...