【问题标题】:piped awk printf - find replace on a (awk) format modifier管道 awk printf - 在(awk)格式修饰符上查找替换
【发布时间】:2020-06-07 19:33:02
【问题描述】:

我正在编写一个 bash 脚本以将“smartctl -a /dev/xx”的输出发送到耳语 DB(石墨/碳/grafana 设置的一部分)。

我使用 awk 中的 printf 来清理输出,然后再发送到 Whisper DB,但我想不出一种方法来删除 awk 的 %s printf 输出中的逗号(从数字中)。 (awk的格式控制字母)

命令是(我已经清理了一些发布,完整的原始脚本链接在底部):

    smartctl -a /dev/${drivenvme} | \
    awk -v date="$(date +"%s")" '\
    /Power On Hours: /{pohours=$4} \
    END {
    printf "blah.server.POHhours %s %s \n", pohours, date;
    }'
    | /usr/bin/nc -w 3 172.17.69.42 2003

这是通过管道传输到上述 awk 命令中的相关原始 smartctl 数据:

root@freenas:~ # smartctl -a /dev/nvme2
Power On Hours:                     39,001

在上面的 awk 命令运行后,这是结果 / 通过管道传送到 netcat (/usr/bin/nc):

  `blah.server.POHhours 39,001 1591556405`

所以上面发送的是:POHhours 39,001

但我需要它发送:POHhours 39001(即不带逗号)

有什么想法吗?

虽然我没有直接通过管道连接到 netcat,而是将 awk 输出保存到临时文件(即 "> /tmp/out.txt" ),然后:

在读取 /tmp/out.txt 时,将 "" 换成 "," 然后 > netcat -w 3 ....

但我对如何在不使用临时文件的情况下解决此问题的想法更加好奇。 (谢谢!)

这里是完整的原始 bash 脚本:https://pastebin.com/sTQEWcdj

及其输出样本(即发送到石墨/耳语数据库的内容):https://pastebin.com/0JBKkNTy

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    变化:

    END {
        printf "blah.server.POHhours %s %s \n", pohours, date
    }
    

    到:

    END {
        gsub(/,/,"",pohours)
        printf "blah.server.POHhours %s %s \n", pohours, date
    }
    

    【讨论】:

    • 太棒了!完美运行,现在我可以根据需要找到/替换其他变量。非常感谢您的出色而快速的回答!
    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多