Добавление столбца в файл с тремя столбцами с помощью awk

Позвольте мне привести очень конкретный пример для основного вопроса: виртуализировать другую ОС поверх Linux, где работает решение по виртуализации.

Только представьте себе этот сценарий:

  • Мне нужно запустить (то, что я больше всего ненавижу )Гость Windows
  • Мне нужно его загрузить
  • Мне нужно ввести некоторые данные в гостевую систему
  • Мне нужно выполнить кое-какую задачу, которую нельзя выполнить вне Windows (одна маленькая причина, по которой я ненавижу Windows)
  • Мне нужно извлечь (сохранить вне этой Windows )проделанную работу
  • Мне нужно отключить этого гостя

При таком сценарии я думаю, какое решение по виртуализации позволит мне сделать все за меньшее время.

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

  1. Загрузите виртуализированную ОС
  2. Передача данных на хост/гость и обратно
  3. Завершение работы виртуальной ОС

Теперь предположим, что вы такой же параноик, как и я, и что Гость находится в «неизменяемом» состоянии, поэтому при каждой загрузке все, что вы сделали при предыдущей загрузке, теряется. Всегда загружайтесь одинаково, если Windows UpDates вошли, они ничего не делают (при загрузке состояния дисков возвращаются обратно в «неизменяемое» состояние )и т. д. Что остается? Только две вещи:

  • Время загрузки гостя
  • Время переключения с горячего на гостевой и наоборот

Итак, снова главный вопрос: какое решение для виртуализации сделает это быстрее?

Чтобы привести пример того, что я знаю и использовал (QEMU и VirtualBox):

  • QEMU в конфигурации, которая «эмулирует» все аппаратное обеспечение, процессор, материнскую плату и т. д., все «эмулируется», так что это не решение «виртуализации», но этот образец служит мне примером очень, очень медленный способ запуска гостя
  • VirtualBOX виртуализирует аппаратное обеспечение и работает намного быстрее, чем QEMU, потому что QEMU эмулирует все аппаратное обеспечение (только для использования сравнения типа черепахи с формулой 1)

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

Для ясности, типичный пример для разработчика:

  • Необходимость протестировать исполняемый файл нового приложения на всех версиях Windows

Представьте себе версии Windows от Win95, 98, ME, 2000, XP, Vista, 7, 8, 8.1, 10 и все подверсии 10 (1507, 1511, 1604, 1608, 1709... и так далее, а также со всеми уровнями обновлений Windows и т. д. и для каждого на Home, Pro, Enterprise и т. д. ).

Это усложняет задачу тестирования нового EXE-файла в более чем нескольких десятках тысяч виртуальных гостевых версий Windows.

Представьте себе реальную задачу (тестирование нового EXE-файла )занимает чуть меньше минуты (просто запустите и протестируйте новые дополнительные функции EXE-файла ), но это должно быть выполнено в течение почти миллиона комбинаций версий Windows, обновлений и т. д.

Для каждой комбинации необходимо выполнить ЗАГРУЗКУ определенного уровня исправления версии Windows и т. д., эта ЗАГРУЗКА подразумевает время, которое может составлять от менее одной минуты до более десяти минут... да, я знаю миллион *1 минута = миллиону минут (около 694,4 дней )...это всего лишь простой пример, показывающий соотношение времени BOOT и времени TEST.

Теперь, если решение виртуализации заставляет этот GUEST загружаться в 99,8 % случаев, чем другое решение виртуализации (, на самом деле почти то же время ), что вы выигрываете 1,5 дня... и это всего лишь 0,2 %.... представьте, что это 5% (не представьте, вы выиграете больше месяца времени 34,27 дня ).

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

Просто пример, который я знаю:

  • Загрузка Windows 10 Home 64Bits версии 1809.17763.404 в гостевой системе через VirtualBox (конфигурация по умолчанию )занимает около восьми полных минут, прежде чем вы сможете запустить Блокнот и ввести его.
  • Загрузка той же версии Windows в гостевой системе через QEMU (в режиме виртуализации, а не в режиме эмуляции и с настройкой конфигурации )занимает всего три минуты.

Это увеличение на 37,5%, что следует учитывать. Вернемся к примеру тестирования EXE на миллионе виртуальных машин... что сэкономит вам 260 дней работы.

Я думаю, тот, кто спросит (, а также меня ), что нужно знать, будет быстрее. Поскольку некоторые из них являются «платными», а некоторые очень дорогими (>1000€ ), каждый человек в мире не может провести тесты, необходимые для сравнения их всех.

А теперь личное мнение... VirtualBOX - это черепаха... Та же самая Windows 10 (чистая установка с USB -ISO )на реальном оборудовании по сравнению с VirtualBOX загружает Windows 10 за несколько секунд по сравнению с три-четыре минуты... но опять же, это не сравнение реального оборудования с виртуализированным, это сравнение виртуализированного с «A» и виртуализированного vesus с «B».

Я много искал в Интернете и не нашел никакого сравнения времени загрузки гостевой ОС Windows по сравнению с решениями виртуализации.

Другое дело — запуск в виртуализированной среде базы данных и т. д. Поскольку у меня нет опыта в этом, я не могу об этом говорить.

О чем я могу говорить (, так как мне нужно тестировать новые EXE-файлы на всех возможных Winodws )о времени ЗАГРУЗКИ на VirtualBOX... это очень, очень медленно... но так как мне нужно передать гостю несколько USB (ключей )и карт PCIe, ключей параллельного порта ()и т. д. и в бесплатном -платном... я застрял на VirtualBOX.

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

0
11.04.2021, 22:27
2 ответа

Можно и так:

awk 'BEGIN {chars="OHH"; next_char=1} {print substr(chars, next_char, 1), $0; next_char++} next_char==4 {next_char=1}' matrix
0
28.04.2021, 22:53
awk '{ print (FNR-1) % 3 ? "H" : "O", $0 }' file

Здесь используется awkдля префикса текущей строки Hили Oв зависимости от того, кратен ли номер текущей строки трем или нет.

Если вы хотите использовать символ табуляции в качестве разделителя между новым столбцом и остальными, убедитесь, что OFSимеет значение\t:

awk -v OFS='\t' '{ print (FNR-1) % 3 ? "H" : "O", $0 }' file

Специальное использование GNU sedи предположение, что вы хотите, чтобы новый столбец был отделен от других символом табуляции:

sed -e '1~3 s/^/O\t/' -e '1~3! s/^/H\t/' file

Первое выражение добавляет Oс последующим символом табуляции к каждой третьей строке, начиная с первой строки. Второе добавляет Hи символ табуляции ко всем строкам, которые не являются каждой третьей строкой, начинающейся с первой строки.

Для этого требуется GNU sedиз-за следующих двух нестандартных -функций:

  1. Адрес n~mозначает «каждая m:-я строка, начиная со строки n».
  2. Последовательность символов \tрасширена до буквального символа табуляции.

Использование других инструментов:

yes 'O H H' | tr ' ' '\n' | head -n "$( wc -l <file )" | paste - file

Это создает устойчивый поток O, H, H(, повторяющийся )на отдельных строках с использованием yesи tr. Этот поток обрывается с помощью head, чтобы соответствовать количеству строк в нашем файле (, это вычисляется с использованиемwc -l). ЗатемOH:вставляются слева от остального содержимого файла с помощью pasteс символом табуляции в качестве разделителя.

1
28.04.2021, 22:53

Теги

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