Ваша задача, похоже, заключается в автоматизации установки дистрибутива Linux. Вероятно, эффективнее было бы изменить образ установки и включить в него свой сценарий автоматизации.
Другие варианты:
expect
, чтобы дождаться появления консоли и выполнить команды, которые вы вводите вручную. (В QEMU это можно сделать, я понятия не имею, как с этим справляется VBox.)Создайте небольшой диск, содержащий ваш скрипт и зависимости. Затем все, что вам нужно ввести, это что-то вроде:
mount /dev/sdb1 /mnt && /mnt/script.sh
Убедитесь, что в вашей виртуальной машине есть подключение к локальной сети, и сделайте что-то вроде:
curl 192.168.56.1 | sh
Установочные носители некоторых дистрибутивов считывают URL конфигурации из командной строки ядра. За подробностями обратитесь к документации вашего дистрибутива.
Ответ @rici правильный, но обратите внимание, что -D
является расширением GNU
Вот awk-решение. Он выполняется за один проход, но сохраняет предыдущую строку:
sort -k3n <file name> | awk 'a[$3]++{ if(a[$3]==2){ print b }; print $0}; {b=$0}'
gawk -F'= ' '{d[$2][a[$2]++]=$0} END{for (i in a) {if (a[i] > 1) for (j in d[i]) {print d[i][j]}}}'
Пояснение:
Для каждой строки ($0 )возьмите второе поле ($2 ), разделенное символом '=', и используйте это поле как ключ к хэшу 'a' для подсчета вхождений этого поля, а также используйте это поле в качестве ключа первого измерения для двумерного -хэша 'd', а значение хэша 'a', на которое ссылается это поле, в качестве ключа второго измерения для хранения значения текущей строки ($ ). В конце перебираем все элементы 'a' со значениями больше единицы (означает дублирование )и вывод соответствующих значений 'd'.
ПРИМЕЧАНИЕ. :Этот один вкладыш не требует сортировки, но потребляет память.
Если ваш файл большой, сортировка и буферизация могут стать проблемой ресурсов. Для этих случаев я бы рекомендовал следующий подход с двумя -проходами:
awk 'NR==FNR{c[$NF]++;next} c[$NF]>1' input.txt input.txt
Ваш входной файл будет обработан дважды.
NR
, глобальный счетчик строк, равен FNR
, счетчику -строк файла ), мы просто увеличиваем счетчик последнего поля в строке (переменная массива c
, с последним значением поля как «индекс массива» ), и немедленно пропустить выполнение. c[$NF]>1
за пределами блока правил. awk
всегда будет печатать текущую строку, включая все возможные изменения, сделанные до сих пор, если она встречает условие, оцениваемое как true
за пределами блока правил. В этом случае будет напечатана текущая строка, если количество вхождений для последнего поля больше 1 (, т. е. это повторяющееся вхождение ). Обратите внимание , что это зависит от вашего желания фильтровать по последнему столбцу. В своем вопросе вы указываете, что это должен быть третий столбец, но строка
KOKOKO= 5
в вашем примере ввод может быть интерпретирован как имеющий только два столбца, в зависимости от того, как именно вы определяете «столбец».