2016-11-09 76 views
0

不斷然後解碼打印模式從解碼文件我該解碼二進制日誌,以ASCII格式 從ASCII格式文件的命令,我需要用awk到grep一些patters,並打印出來運行AWK正在用awk

如何才能做到這一點?

我試過的是如下在shell腳本中,它不起作用。

command> file.txt | awk/pattern/| SED /模式/

我也需要命令不間斷的解碼文件,並記錄在案,印刷圖案被更新提前

+0

'...> file.txt | awk ...'是一個錯誤,你已經將'cmd'的輸出重定向到一個文件,你不能將它重定向到'|'。你不會說如果你真的需要'file.txt'。所以最簡單的是'cmd |解碼| awk ...'awk可以做任何'sed'可以做的事情。對於一次性使用,請繼續追加sed。對於那些將要投入使用多年的東西,找出如何在'awk'中完成所需的替換並保存一個進程。祝你好運。 – shellter

+0

另外這個Q非常含糊。讀者希望看到可重複的案例和證據。請閱讀http://stackoverflow.com/help/mcve幷包含示例輸入,預期輸出,實際代碼,當前輸出,錯誤消息以及您對發生問題的意見。祝你好運。 – shellter

回答

1

命令不間斷的解碼文件

感謝,並保持印刷圖案

第一個問題是如何連續體現自己。大多數日誌文件都是通過附加到 - 我們的目的,通過一些未知的外部進程 - 而週期性地旋轉。如果你要連續解碼它們,你將不得不跟蹤日誌旋轉。

command是否可以連續解碼,或者您是否打算定期重新運行command,從哪裏拿起你離開的地方?如果是後者,你可能會改爲嘗試一些變化:

cat log | command | awk 

如果不能做到,你必須記錄下每次迭代結束,是這樣的:

touch pos 
while -f pos 
do 
    command | awk -v status=pos script.awk > output || rm pos 
done 

其中script.awk跳過輸入,直到NR等於pos文件中的數字值。然後它處理直到EOF的行,並用其最終的NR覆蓋pos。出錯時,它調用exit 1,並且文件被刪除,循環終止。

我建議您忽略sed,並將所有模式匹配邏輯放在一個awk腳本中。這將更容易理解和更便宜的執行。

+0

謝謝詹姆斯。命令可以連續解碼 – user2074894

+0

我想出了這樣做的方法。我把命令放在無限while循環中就足夠了 – user2074894