PERL & SHELL

简介:
众所周知,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
      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    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,如需转载请自行联系原作者
相关文章
|
机器学习/深度学习 Unix Linux
bash shell 无法使用 perl 正则
今天跟大家分享一个关于正则表达式的案例
|
Shell Linux Perl
LINUX 常用替换命令三种方法(perl、shell、sed)
LINUX 常用替换命令三种方法(perl、shell、sed)
565 0
LINUX 常用替换命令三种方法(perl、shell、sed)
|
网络协议 Shell Perl