【问题标题】:How's the right way to pipe stdout & stderr from ping into an awk program? [duplicate]将 stdout 和 stderr 从 ping 传送到 awk 程序的正确方法是什么? [复制]
【发布时间】:2019-04-16 15:30:38
【问题描述】:

以下是我尝试从 Zsh 脚本评估的一些命令的摘录:

cmd="ping -qc 3 -W 5 8.8.8.8 | xargs -0d '\n' awk -f presetup/testping.awk 2>&1"
print -r ${cmd}
output=$(eval ${cmd})
print ${output}

我不知道我错过了什么,但我想做的只是用一个 awk 脚本处理 ping 的 stderr 和 stdout。这是我得到的输出:

awk: presetup/testping.awk:6: fatal: cannot open file `PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.' for reading (No such file or directory)

该程序应该解析 ping 命令的每个输出行,并与正则表达式匹配其输出。关于我缺少什么的任何想法?

【问题讨论】:

  • xargs 是错误的,你必须通过管道将 stdout 和 stderr 传输到 awk
  • @karakfa,感谢您的意见。我删除了xargs 并尝试了这个:ping -qc 3 -W 5 8.8.8.8 2>&1 awk -f presetup/testping.awk - 没有成功。我有以下输出:ping: -: Name or service not known.
  • @karakfa,没关系,我找到了。正确的方法似乎如下:ping -qc 3 -W 5 8.8.8.8 | 2>&1 awk -f presetup/testping.awk -感谢您为我指明正确的方向!

标签: awk zsh xargs


【解决方案1】:

非常感谢@karakfa 为我指明了正确的方向。看来正确的方法如下:

ping -qc 3 -W 5 8.8.8.8 | 2>&1 awk -f presetup/testping.awk -

更正,将标准错误重定向到标准输出,然后将标准输出通过管道传输到 awk:

ping -qc 3 -W 5 8.8.8.8 2>&1 | awk -f presetup/testping.awk

或者:

ping -qc 3 -W 5 8.8.8.8 |& awk -f presetup/testping.awk

谢谢@tripleee!

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 2013-05-21
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多