這裏有一個簡單的解決方案進行實驗,即假定最後一行將始終包含你想要的數據:
# -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
# Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
# 50.0 36112 34.1 138026 1.9 179048 7.0 51361 51.1 312242 4.3 15211.4 10.3
# block write, block read and random seeks/s
bonnie++ \
| awk '
{line=$0}
END{
# print "#dbg:last_line=" $line
split(line, lineArr)
printf ("blkWrt=%s\tblkRd=%s\tRandSks=%s\n", lineArr[4], lineArr[8], lineArr[12])
}' # > bonnieOutput
# ------^^ remove # to write output to file
(請注意,邦妮後\
焦炭++必須是行的最後一個字符,NO允許空格或者標籤!!!(否則會炸掉!);-))
Awk讀取通過管道傳遞的所有行。當你在awk的END {}塊中時,將最後一行讀入lineArr [],然後使用數據中字段的索引號打印出該行所需的元素,所以lineArr[4]
將返回最後一行數據中的第4個字段,lineArr[12]
,第12個等。您可能需要調整用於獲取要顯示的數據的索引號。 (你必須明白這一點!;-)
將數據保存到一個文件中,取消註釋(除去}'
和> bonnieOutput
之間的#
字符使用shell重定向。離開#
焦炭到位,直到你你需要的輸出,然後你可以將它重定向到一個文件
不用說,我在printf
,如blkWrt=
中使用的標籤主要用於調試,一旦你確定需要捕獲哪些數據,並且它每次可靠地出現在相同的位置,那麼您可以刪除這些標籤,然後您將擁有一個非常乾淨的數據文件,可以使用其他程序處理。
請記住,幾乎所有的Unix工具箱實用程序都是面向行的,也就是說他們希望一次處理1行數據,並且常常會有技巧來查看正在處理的內容。請注意我在END {}塊頂部包含的#dbg行。您必須刪除'#'以取消註釋以查看調試輸出。
還有很多可以做的事情,但是如果你想用awk學習ksh/unix工具箱,你將不得不花費時間去理解這些特性。如果你已經閱讀了包含你正在使用的問題的章節,並且不知道如何開始解決這個問題,那麼你最好再讀一遍這個章節,好嗎?;-)
編輯
注意,在awk
,可變$0
包含當前行中的所有文本(由RS
變量值,通常是Unix行結尾字符,如\n
定義)。其他編號的值,即$1
,$2
表示當前行上的第一個或第二個「字段」($0
)。
根據我對您下面評論的新理解,您希望從包含文本「延遲」的行中提取值。這更容易處理。基本格局將是
bonnie++ \
| awk '
/Latency/{
# print "#dbg:latency_line=" $0
printf ("blkWrt=%s\tblkRd=%s\tRandSks=%s\n", $4, $8, $12)
}' # > bonnieOutput
所以這個代碼表示,讀取邦尼++所有輸出到awk中,通過管道,當你發現包含文本「延遲」一條線,打印4找到的值,第8和第12個字段,使用包含自描述標記(如blkWrt等)的printf格式字符串。 您必須更改$ 4等才能正確匹配每個數據元素的當前行中的數字。 I.E.也許它是5美元,9美元,13美元,或3美元,9美元,24美元?好?
請注意,/ Latency /區分大小寫,如果輸出中出現其他位置出現該單詞,則必須修改用於過濾輸出的reg-exp「規則」。
作爲一種學習練習,並且作爲任何Unix用戶每天都在使用的非常基本的工具,請跳過awk,然後看看bonnie++| grep 'Latency'
能爲您帶來什麼。
IHTH
你得表現出一些試圖解決這個問題,以獲取有關計算器的幫助。在這裏讀到10個用'awk'標記的問題應該有很高的可能性讓你指向正確的方向。祝你好運。 – shellter 2013-02-25 19:17:51
非常感謝您的回覆,我現在正在閱讀「Korn Shell。Unix和Linux編程手冊」。並且獲得了一些示例代碼的樂趣。並且我得到了一些使用awk在txt文件中查找模式的線索。但是我仍然通過如何使用ksh來運行'bonnie'基準測試工具。你有什麼想法嗎? – 2013-02-25 19:30:49
就我個人而言,我從來沒有聽說過「邦妮」(但那可能是我的問題)。你知道現在的系統中是否存在bonnie基準?如果從命令行運行'bonnie'會返回'command not found'(或類似命令),並且您確定它應該在您的系統上,那麼您將發出cmd'find。名bonnie'。如果返回字符串如'/ path/to/alt/dir/bonnie',則執行PATH =「$ PATH:/ path/to/alt/dir」並重新運行bonnie。然後你會得到一些輸出。你應該在你的主要問題中引用你的書名,也許用一個頁面#。祝你好運。 – shellter 2013-02-25 19:35:50