Интегрировать awk one-liner в скрипт awk? - PullRequest
0 голосов
/ 12 ноября 2018

Если у меня есть этот однострочный

$ echo 0123456789ab | awk '{gsub(/..\B/,"&:")}1'
01:23:45:67:89:ab

, который я хотел бы использовать в сценарии awk, и поэтому пытается

cat $hosts | awk '{
    print "host "$5" {"
    print "  option host-name \""$5"\";"
    print "  hardware ethernet "$3";"
    x = {gsub(/..\B/,"&:")}1
    print "  fixed-address "print x";"
    print "}"
    print ""
}' > /etc/dhcp/reservations.conf

, но это не с

awk: cmd. line:5:     x = {gsub(/..\B/,"&:")}1
awk: cmd. line:5:         ^ syntax error
awk: cmd. line:6:     print "  fixed-address "print x";"
awk: cmd. line:6:                             ^ syntax error

Вопрос

Кто-нибудь знает, как интегрировать такие однострочники в скрипт awk?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы не можете сохранить { в переменной, поскольку она обозначает какое-либо действие. Более того, в случае, если вы сохраняете вывод sub или gsub, он всегда дает вам количество замен, сделанных в строку / переменную. так что лучше попробуйте изменить эту строку кода следующим.

Измените 2 строки:

x = {gsub(/..\B/,"&:")}1
print "  fixed-address "print x";"

Кому:

new_line=$0
gsub(/..\B/,"&:",new_line)
print "  fixed-address "new_line";"

Если вы сделаете выше, значение вашей фактической строки НИКОГДА не изменится, и вы сможете использовать его для других вещей позже в вашем коде. Я не проверял выше, так как образцы не были даны, но это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...