我有來自我正在使用的虛擬雷達服務器的實時原始 json 流資料。
我使用 Netcat 獲取資料并使用 jq 將其保存在我的 kali linux 上。使用以下命令。
數控 127.0.0.1 30006 | jq > A7.json
但我想從資料流中過濾特定內容。
我使用以下命令來提取資料。
貓 A7.json | jq '.acList[] | select(.Call | contains("QTR"))' - 獲取選定的航空公司
但我后來意識到,上面的命令只能作業一次。換句話說,它不會重繪 。因為資料每秒都在更新。我必須一遍又一遍地執行命令來提取導致生成重復資料的過濾器資料。
有人可以幫我如何過濾實時資料而不一遍又一遍地執行命令。
uj5u.com熱心網友回復:
由于您不使用該--stream選項,我想您的檔案是常規的JSON 檔案。
要每秒執行一次命令,您可以實作一個sleeps 持續 1 秒的回圈:
while true; do sleep 1; nc 127.0.0.1 30006 | jq '.acList[] | select(…)'; done
要在螢屏上顯示輸出并保存到檔案中(就像您對 所做的那樣A7.json),您可以添加對 的呼叫tee:
# saves the document as returned by `nc` but outputs result of `jq`
while true; do sleep 1; nc 127.0.0.1 30006 | tee A7.json | jq '.acList[] | …'; done
# saves the result of `jq` and outputs it
while true; do sleep 1; nc 127.0.0.1 30006 | jq '.acList[] | …' | tee A7.json; done
uj5u.com熱心網友回復:
你能試試這個嗎?
nc localhost 30006 | tee -a A7.json |
while true; do
stdbuf -o 0 jq 'try (.acList[] | select(.Call | contains("QTR")))' 2>/dev/null
done
uj5u.com熱心網友回復:
假設沒有其他行程正在競爭該埠,我建議嘗試:
nc -k -l localhost 30006 | jq --unbuffered ....
或者,如果您想保留 netcat 命令輸出的副本:
nc -k -l localhost 30006 | tee A7.json | jq --unbuffered ....
您可能想tee -a A7.json改用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451483.html
上一篇:dup2的問題
