監控串流並用awk及時打印出來 - Linux

By Victoria
at 2015-10-13T00:25
at 2015-10-13T00:25
Table of Contents
※ 引述《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 滿了
或者是必要時候才輸出,畢竟這是常見的緩衝機制。
--
: 各位大大
: 小弟想對監控的串流訊息的每一行用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 滿了
或者是必要時候才輸出,畢竟這是常見的緩衝機制。
--
Tags:
Linux
All Comments

By Edith
at 2015-10-16T07:07
at 2015-10-16T07:07
Related Posts
我想請教關於MIT license

By Daph Bay
at 2015-10-12T22:41
at 2015-10-12T22:41
我想請教關於MIT license

By Quintina
at 2015-10-12T22:07
at 2015-10-12T22:07
HackingThursday 誰來晚餐 (2015-10-15)

By Dora
at 2015-10-12T12:03
at 2015-10-12T12:03
mac上找不到mosh

By Suhail Hany
at 2015-10-12T09:48
at 2015-10-12T09:48
監控串流並用awk及時打印出來

By Necoo
at 2015-10-12T00:54
at 2015-10-12T00:54