看板 Linux 關於我們 聯絡資訊
※ 引述《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
makefriends: 謝謝你,這看起來很有用,我明天試試看 10/13 01:11