如何将stdout和stderr从ping传送到awk程序的正确方法?

时间:2018-11-13 18:09:43

标签: awk zsh xargs

这是我尝试从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命令的每条输出行,并与正则表达式匹配其输出。关于我所缺少的任何想法吗?

1 个答案:

答案 0 :(得分:-1)

非常感谢您为我指明正确的方向@karakfa。似乎正确的方法如下:

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

更正,将stderr重定向到stdout,然后将stdout管道传输到awk:

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

OR:

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

谢谢@tripleee!