В моем сценарии ниже я предполагаю, что входной файл всегда имеет пробел до и после :
, однако это не всегда тот случай, когда входной файл имеет это.
awk '!/^#/ && !/000000000000/ && /[0-9A-Fa-f]{12}/ {
print "host "$5" {"
gsub(/..\B/,"&:", $3)
print " hardware ethernet "$3";"
print " fixed-address "$1";"
print "}"
print ""
}' hosts > reservations.conf
Вопрос
Можно ли выполнить глобальный поиск и заменить ":"
на " : "
(есть пробел до и после ":"
) до того, как awk начнет анализировать файл?Это должно быть сделано в памяти, чтобы входной файл не был изменен на диске.
Я думаю, это можно сделать с помощью sed
, а затем направить его в awk, но часто я сталкиваюсь с этимТакая ситуация, поэтому мне бы очень хотелось узнать, есть ли способ сделать это в awk или gawk.
Пример входных данных
10.52.0.1 : 000000000000 : newhost-52-1 : #
10.52.0.2 : 180373D0FE86: ster.dtocal :#
Пример требуемого вывода
host newhost-52-1 {
hardware ethernet 00:00:00:00:00:00;
fixed-address 10.52.0.1;
}
host ster.dtocal {
hardware ethernet 18:03:73:D0:FE:86;
fixed-address 10.52.0.2;
}