awk: Вставляйте строки после комментариев и импортируйте в исходный файл

В большинстве случаев вы не должны трогать настройки swappiness; ядро будет делать правильные вещи по умолчанию (даже если это означает большее количество свопинга). Ядро обычно использует время простоя для спекулятивной замены некоторых страниц, которые, по его мнению, могут быть освобождены позже, чтобы при возникновении нехватки памяти быстро освободить физическую память. Я не думаю, что вы заметите снижение производительности.

Что касается приостановки на диск и свопинга: конечно, предпочтительнее свопинг на SSD из-за меньшего времени поиска, но приостановка на диск - это однопоточный линейный ввод-вывод, поэтому использование SSD для этого не сильно помогает (но занимает много драгоценного места на SSD).

Я бы рекомендовал создать два раздела подкачки: маленький на SSD и больший с более низким приоритетом на HDD, а затем использовать раздел на HDD для гибернации.

0
23.12.2018, 11:35
2 ответа

Может быть не самым эффективным для больших файлов, но вставляет новую строку импорта после ПОСЛЕДНЕГО найденного оператора import...:

tac file | awk '/^import/ && !I {I = 1; print "import New_IMPORT"} 1' | tac
0
28.01.2020, 04:06

Ваша ошибка состоит в том, что вы предполагаете, что .(, как и в .*), не соответствует новой строке в awk:. Это отличается от sed, grep, perl, javascriptи т. д. (Думайте о awkрегулярных выражениях как о всегда жадных и с флагом //sвсегда на ).

Установка для RSзначения ^$приведет к тому, что awkбудет выделять весь файл как одну запись, а затем шаблон \/\/.*\nбудет соответствовать от первой //до последней новой строки в файле; ветвь import.*\nдаже не будет рассматриваться.

Вероятно, есть более разумные способы сделать это, но это будет вставлять строку import NEW_IMPORTпосле первого запуска строк importиз вашего файла:

awk '!e&&/^import/,e=!/^import/{if(e)print "import NEW_IMPORT"}1' test.swift
0
28.01.2020, 04:06

Теги

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