Не работает цикл или не работает

Возможно, вам следует продолжать использовать sed . Использование N может добавить следующую строку ввода в пространство шаблона, после чего вы можете сопоставить \n между двумя строками.

См.:

sed ':a; N; $!b a; s/\n\s\{1,\}/ /g'
-2
19.09.2019, 15:34
3 ответа

Существует множество способов сделать это, в том числе:

$ awk '/^ENDTIME/ {next}; NR>4' sourcefile 
RtpNm01                                   CE_01      run      full
RtpAcp01                                  CE_01      run      full
RtpDynManLite01                           CE_01      run      full
RtpDynLiteInc01                           CE_01      run      full

Печатаются все входные строки после четвертой строки, за исключением любой строки, начинающейся с ENDTIME.

Я думаю, это то, что вы пытались сделать с помощью этого странного цикла while (getline)в блоке /Processname\s*....../-в этом не было необходимости, awk уже перебирает каждую строку ввода, и вы можете проверить значение NR (номер текущей входной строки ).

и:

awk '! /^(STARTTIME|ENDTIME|=====|Processname)/' sourcefile

grep -vE '^(STARTTIME|ENDTIME|=====|Processname)' sourcefile

sed -E -e '/^(STARTTIME|ENDTIME|=====|Processname)/d' sourcefile

Все они выводят любые строки , кроме , соответствующие регулярному выражению. Все они используют одно и то же расширенное регулярное выражение (ERE -по умолчанию с awk,включено с помощью -Eдля grepи sed), чтобы искать любое из чередований в начале строки (, закрепленной с помощью^).

и:

sed -e '1,4d; $d' sourcefile

Удалить строки с 1-й по 4-ю и последнюю строку.

0
28.01.2020, 05:18

Я изменил или (|| )добавить (&& )и все заработало.

cat rtpServiceStatusrun | awk '/Processname\s*Node\s*Status\s*QueueAv/{
while (getline){
        if( $0 !~ /^====*/ && $0 !~ /^ENDTIME*/ ){
                        print $0
                }
        }
}'
-2
28.01.2020, 05:18

Один вариант:

cat file | head -n -1 | tail -n +5
0
28.01.2020, 05:18

Теги

Похожие вопросы