推 makefriends: 謝謝你,這看起來很有用,我明天試試看 10/13 01:11
※ 引述《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