将awk单行代码集成到awk脚本中吗?

时间:2018-11-12 10:43:15

标签: linux awk

如果我有这种单线纸

$ 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 :(得分:1)

您不能将{保存到变量中,因为它表示某些操作。此外,如果保存了subgsub的输出,它总是会为您提供替换为行/变量的数量。因此最好尝试将代码行更改为以下代码。

更改您的2行:

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

收件人:

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

只要超出实际行的值,就永远不会改变,您也可以稍后在代码中使用它来做其他事情。由于没有提供样品,所以我还没有进行过测试,但是应该可以。