Re: [問題] 監控串流並用awk及時打印出來

看板Linux作者 (小州)時間10年前 (2015/10/13 00:25), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《makefriends (5 + 2 = life)》之銘言: : 各位大大 : 小弟想對監控的串流訊息的每一行用awk加上時間戳後存成文字檔。 : 舉個例子: : ping -c 50 127.0.0.1 | awk '{ print strftime("%T",systime()),$0 } ' | tee test.txt : 可是awk好像是把整段訊息處理完後,才一口氣全部打印出來, : 可是我希望log還沒跑完的時後,就可以一邊從銀幕上看到,就像是讓awk可以每處理完一行後就馬上打印出。 : 請問個位大大,有這個可能做到嗎? 這段 python code 提供給你測試看看,我初步看過應該可用: #!/usr/bin/env python import os import sys import time while True: line = sys.stdin.readline() if len(line) != 0: result="%s %s" % (time.strftime("%T"),line) print result, sys.stdout.flush() else: break 儲存成為 action.py 之後,後續這樣使用: ping -c 50 127.0.0.1 | python action.py | tee xxxx.txt 提供給你參考。 這程式碼主要應該是重點為 sys.stdout.flush() 強迫立即輸出 stdout 內容, 我猜你的 awk 本身應該就是標準的 buffered 處理所以通常都要等 buffer 滿了 或者是必要時候才輸出,畢竟這是常見的緩衝機制。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.155.17 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1444667150.A.6E4.html ※ 編輯: kenduest (122.117.155.17), 10/13/2015 00:28:31

10/13 01:11, , 1F
謝謝你,這看起來很有用,我明天試試看
10/13 01:11, 1F
文章代碼(AID): #1M6zyERa (Linux)
文章代碼(AID): #1M6zyERa (Linux)