Параметр командной строки -vsep = $ SEPERATOR
устанавливает для переменной awk sep
(которая используется при поиске / замене) все, что вы укажете. ;
в вашем случае.
# NR = Number of current Record, or line number
# Skip the first line
if ( NR > 2 ) {
# NF = Number of fields in the current record
# If the line contains something other than a blank line or the
# awk field separator characters (whitespace by default)
if ( NF ) {
# If we have not seen a blank line (script flag s)
if ( !s ) {
# Search the current line repeatedly (gsub) for any number of spaces (" *")
# before a ";" then any number of spaces or tabs ([ \t]*) after the `;`
# and replace it all with just a ";"
gsub( " *"sep"[ \t]*", sep );
# Print the line number, 0 based (NR-2) as a signed decimal integer (`%d`)
# then the complete line ($0) followed by a new line character (\n)
printf "%d%s\n", NR-2, $0;
}
} else {
# Set the "seen a blank line" flag
s = 1
}
}
имя_файла> новый_файл
записывает вывод в новый файл с именем новый_файл
Между прочим, если вы структурируете скрипт, как показано ниже, его будет намного легче читать и будет быстрее, если у вас большой объемы данных после пустой строки.
awk -vsep=$SEPERATOR '{
# Skip the first line
if (NR == 1) { next; }
# Stop processing if we see a blank line
if (NF == 0) { exit; }
# Remove spaces before and spaces/tabs after separator
gsub( " *"sep"[ \t]*", sep );
# Print the line with a record number starting from 0
printf "%d%s\n", NR-2, $0;
}' file_name > new_file
Я думаю, вы ищете /proc/sys/vm/overcommit_memory
, для которого вам следует установить значение 2, чтобы обеспечить принудительную проверку выделения памяти (программы не смогут выделить больше памяти, чем реально доступно ). Вам, вероятно, также потребуется настроить /proc/sys/vm/overcommit_ratio
, по крайней мере, если какой-либо из ваших программ необходимо выделить более половины установленной памяти. Все это документировано на procfs
справочной странице .
Я бы порекомендовал пересмотреть ваше решение отключить все ваши свопы; см. Зачем Linux нужно пространство подкачки в виртуальной машине? для получения подробной информации.
Стоит отметить, что ядро не может выполнить подкачку, если подкачка отключена. Все, что он может сделать, это использовать сопоставленные файлы в качестве резервного хранилища, но это обычно не требует написания (, в частности, для исполняемых файлов и библиотек ). Если вы видите записи в состоянии стресса, это, вероятно, связано с тем, что ядро сбрасывает грязные страницы (в основном из своих буферов ), чтобы попытаться восстановить их.