Awk все строки выше совпадающего параметра

Если niceвызывает много операций ввода-вывода, вам следует выполнить:

ionice -c 3 nice...

, чтобы свести к минимуму влияние операций ввода-вывода.

И наоборот, если ioniceвыполняет много вычислений, вы должны

nice -n 19 ionice...

, чтобы свести к минимуму влияние на ЦП.

Но ни то, ни другое не верно, это очень простые команды. (они просто делают системный вызов для изменения параметра процесса, а затем выполняют команду ). Так что разница должна быть незначительной.

И чтобы быть полным, если бы оба были верны, вы не могли бы действительно выиграть --влияние одного из них не может быть уменьшено.

0
21.01.2020, 11:06
5 ответов

Попробуйте удалить условие and, удалите следующий код из вашей строки:

&& NR>=%-1
0
28.01.2020, 02:17

Я думаю, вы можете просто использовать awk напрямую:

awk '/331881/ { exit } 1' test.out

Это напечатает все строки, но для строки, соответствующей 331881, выйдите.

1
28.01.2020, 02:17

Другим хорошим инструментом может бытьsed:

sed -n '/shop4_0_Log0000331881\.Z$/q;p' test.out
1
28.01.2020, 02:17

Предполагая, что вы находитесь в каталоге, содержащем перечисленные файлы, используяzsh:

ls -ld shop4_0_Log<331882->.Z

<331882->— это специальный шаблон zsh-, который соответствует целым числам от 331882 или больше.

С какой-то другой оболочкой:

for name in shop4_0_Log*.Z; do
    number=${name#shop4_0_Log}
    number=${number%.Z}

    if [ "$number" -ge 331882 ]; then
        ls -ld "$name"
    fi
done

Здесь мы перебираем имена, которые начинаются с shop4_0_Logи заканчиваются на .Z. Для каждого такого имени мы выбираем целую часть имени файла, и если это 331882 или больше, мы вызываем ls -ldдля имени.

Если начальные нули заставляют оболочку интерпретировать некоторые числа как восьмеричные (, это не так в моих тестах ), тогда используйте 10#$numberв тесте, чтобы принудительно интерпретировать число как восьмеричное. десятичное целое число (поддерживается kshи bashи некоторыми другими оболочками ).

Ни один из этих двух вариантов не зависит от наличия текстового файла, содержащего некоторый lsвывод.

Связанные:

2
28.01.2020, 02:17
j=`awk '/331881/{print NR}' file`

awk -v j="$j" '{a[++i]=$0}/331881/{for(x=NR-j;x<NR;x++)print a[x]}' file

выход

-rw-rw----    1 informix informix    9117025 Jan 21 05:22 shop4_0_Log0000331875.Z
-rw-rw----    1 informix informix    8897981 Jan 21 05:24 shop4_0_Log0000331876.Z
-rw-rw----    1 informix informix    9325351 Jan 21 05:31 shop4_0_Log0000331877.Z
-rw-rw----    1 informix informix    9645109 Jan 21 05:34 shop4_0_Log0000331878.Z
-rw-rw----    1 informix informix    9950581 Jan 21 05:40 shop4_0_Log0000331879.Z
-rw-rw----    1 informix informix   10655940 Jan 21 05:59 shop4_0_Log0000331880.Z
0
28.01.2020, 02:17

Теги

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