【问题标题】:Integrate awk one-liner into awk script?将 awk 单行代码集成到 awk 脚本中?
【发布时间】:2019-04-15 01:46:45
【问题描述】:

如果我有这个单线

$ 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 脚本中?

【问题讨论】:

  • 你的输入文件是什么?
  • 您应该删除 gsub 命令周围的 {,因为这不再是单行命令(并且可能完全删除 1)
  • @Sandra Schlichting,cat 和awk 不需要一起使用,awk 也可以自己读取文件。
  • 向我们展示您正在使用的输入文件?你想gsub() 的值是多少?预期输出是多少

标签: linux awk


【解决方案1】:

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

改变你的 2 行:

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

收件人:

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

通过高于实际行的值将永远不会改变,您也可以在稍后的代码中使用它来做其他事情。我没有在上面测试过,因为没有提供样品,但它应该可以工作。

【讨论】:

    猜你喜欢
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多