Автоматический сценарий Debian для Linux для освобождения памяти - совет

С помощью sed это можно сделать следующим образом. Поместите два маркера в начале двух линий, предварительно переместив их в пространство шаблона.

Затем начните перемещать их вправо по символу за раз. Во время этого движения обратите внимание на то, что находится справа от маркеров, и примите соответствующие меры.

Остановиться, когда маркер достигнет конца пространства шаблона. Теперь уберите маркеры, так как их работа сделана, и останется то, что вам нужно. Обратите внимание на маркер \n

 sed -Ee '
   /#/N;/\n/!b
   s/\n/&&/;s/^/\n/
   :a
       /\n#(.*\n.*\n)./{
          s//\n\1/;ba
       }
      s/\n(.)(.*\n.*)\n(.)/\1\n\2\3\n/
   /\n$/!ba
   s/\n//;s///2
'    input

Использование Perl решается следующим образом:

 perl -pe  ' 
     next unless /#/;

     my($n,$p) = (scalar <>);

     while ( /#/g ) {
        pos($n) = pos() - 1 - $p++;
        $n =~ s/\G.//;
     }

     y/#//d;s/\z/$n/;
'      input_file 

Рабочий:

1. Skip lines that donot have hash char.
 2. Save the next line in $n and init. $p counter which keeps track of the number of hash chars erased till now.
3.  Monitor the position of the hash char in a while loop and using info generate the position of the char to be deleted in next line.
4.  Erase it using the \G metachar in s///
5.  In the final step remove the hash chars from present line and append the next line to it.

Показан другой метод, на этот раз использующий массивы:

perl -aF'' -ne '
    print,next unless /#/;
    print,last if eof;

    my @I = grep { $F[$_] ne "#" } 0.. $#F;
    my @N = split //, <>;

    print @F[@I], @N[@I];
'    input_file

Рабочий:

1. Invoke Perl to split each line on a per character basis and have it stored in the array @F anew for every line read.
2.  Record the array indices for which the array element is a non hash character.
3.  Readin the next line, split it on a per character basis and store in array @N.
4. Now its a matter of selecting the indices we stored in @I and fetch those from arrays @F and @N.

Метод регулярных выражений:

perl -pe '
   $_.= <> unless eof;

    s/\G.(.*\n.{@{[+pos]}})./$1/ while /(?=#.*\n.)/g;
'        input_file

Описание:

° добавить следующую строку к текущей, если это не последняя строка.

° Запишите позиции символов решетки в первой строке с помощью цикла while.

° Затем удалите символ решетки в исходной строке и символ в соответствующей позиции в следующей строке.

° После выхода из цикла while опция -p автоматически выведет $ _на стандартный вывод.

Метод с простыми строковыми операциями:

perl -pe '
   last if eof;
   my $n = <>;
   while ( (my $p = index($_,"#")) > -1 ) {
      substr($_, $p, 1) = "" for $_, $n;
   }
   $_.= $n;
'       input_file

Это включает в себя использование встроенного индекса для проверки позиции хэша, а затем его использование во встроенной подстроке два раза... в первой и следующей строках.

0
19.08.2020, 18:41
2 ответа

Да, это снизит производительность. Но ничто другое не должно ломаться, пока вы не вводите но.

Но зачем это делать. Нет никакой выгоды. Ядро пытается найти применение неиспользуемой памяти.

0
28.04.2021, 23:23

Мой совет: не надо !

Если у вас нет особой потребности в памяти сейчас , лучше иметь память для хранения потенциально полезных вещей. Ядро Linux сможет восстановить память менее чем за микросекунду, если она ему действительно понадобится. Напротив, для получения данных с традиционных жестких дисков потребуются десятки тысяч микросекунд (. Жесткому диску со скоростью вращения 7200 об/мин требуется в среднем 4,2 миллисекунды, чтобы диск повернулся в нужное место, а время поиска на более мощных дисках также составляет 4. миллисекунд ), если окажется, что вам это нужно. Даже производительность ssd будет ниже по сравнению с оперативной памятью

Нет экономии энергии, связанной с отсутствием полезной информации в памяти.

Причины удаления кешей в основном связаны с эталонными тестами, особенно с тестовыми -системами маркировки файлов -. Можно представить себе инструмент гибернации, также желающий уменьшить объем основной памяти, необходимой для записи.

1
28.04.2021, 23:23

Теги

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