gpt4 book ai didi

linux - 通过 awk 进行管道 ping 并将输出重定向到文件

转载 作者:行者123 更新时间:2023-12-04 16:17:30 25 4
gpt4 key购买 nike

我的想法是不断 ping 一个地址,提取一些信息,并将其写入文件。

这是我尝试过的:

$ ping google.com | awk -F' ' '{ time = split($8, arr, "time="); print arr[2] }' > file.log

然后等待几秒钟并执行:

$ file file.log
file.log: empty

但是,这按预期工作(为 ping 输出中的每一行打印 time=):

$ ping google.com | awk -F' ' '{ time = split($8, arr, "time="); print arr[2] }'

这也有效:

$ echo "64 bytes from some.net (x.x.x.x): icmp_seq=7 ttl=115 time=16.7 ms" | awk -F' ' '{ time = split($8, arr, "time="); print arr[2] }' > file.log
$ cat file.log
16.7

这有效:

$ ping -c 1 google.com | awk -F' ' '{ time = split($8, arr, "time="); print arr[2] }' > file.log

只有当我继续 ping 时,它才不起作用。我的 file.log 仍然为空。

如何实现 ping 不断运行并填充我的 file.log

最佳答案

标准输出的输出通常是缓冲的 - 在缓冲区满之前不会写入任何内容。输出到 stderr 通常会立即写入。

你可以尝试:

ping google.com |\
awk 'sub("time=","",$8) { print $8 >"/dev/stderr" }' 2>file.log

或者:

ping google.com |\
awk ' sub("time=","",$8) { print $8; fflush() }' >file.log

关于linux - 通过 awk 进行管道 ping 并将输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65604876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com