衆所周知,perl處理字元串的功能十分強大,然而,作為一種語言,強大是一回事,簡單友善則是另外一回事。
今天就遇到一個例子,是這樣的,想要在xen上擷取某個虛拟機的CPU使用率,于是使用指令“xentop -b -i 2 > /tmp/xentop.tmp”,獲得類似下面的資料:
NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID
Domain-0 -----r 1042 0.0 914432 44.6 no limit n/a 2 0 0 0 0 0 0 0 2148573580
VM1 --b--- 70 0.0 532352 26.0 540672 26.4 1 0 0 0 1 0 0 0 2148573580
Domain-0 -----r 1042 2.4 914432 44.6 no limit n/a 2 0 0 0 0 0 0 0 2148573580
VM1 --b--- 70 0.8 532352 26.0 540672 26.4 1 0 0 0 1 0 0 0 2148573580
對我們有用的是後半部分(也就是xentop第二次計算出的資料),假設我們要提取VM1的CPU使用率,熟悉shell指令的知道,隻需要使用下面的指令就可以了:
cat /tmp/xentop.tmp | grep VM1 | tail -n 1 | awk '{print \$4}'
而如果用perl來實作的話呢,一種很自然的處理方式是:先将xentop的結果按行進行split,然後對每一行進行分析,找到以VM1打頭的最後一 行,接着再将該行用空格進行split,最後取得結果中的第4項資料。呵呵,split就需要兩次,也夠麻煩的了。這個問題我跟dahong探讨了一下, 他大體也是這個思路,不過他好像也不是perl的進階使用者,:)
或許perl也有類似shell的“一行式”解決方法吧,隻是我不知道而已,知道的告知一聲啊,呵呵。
本文轉自Intel_ISN 51CTO部落格,原文連結:http://blog.51cto.com/intelisn/130726,如需轉載請自行聯系原作者