linux下文本处理

来源:互联网 发布:sql distinct 复杂 编辑:程序博客网 时间:2024/05/16 12:48

硬盘采样:

sar -d  1 1 
Linux 2.6.18-128.1.6.el5_lustre.1.8.0.1smp (cnode20)    01/02/2014


03:20:45 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
03:20:46 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:20:46 PM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:20:46 PM    dev8-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:20:46 PM    dev8-3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00


Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00


想取出util的值,组成一个文件.

使用sed处理行, awk 处理列:

sar -d  1 1 | sed -n '4p'| awk '{ print $11;}'   //4p表示第四行,$11表示11列
0.00

同样的:

sar -d  1 1 | awk 'NR==4{ print $11;}'   NR表示第四行

0.00


但是以上都不是最好的方法,在网上搜了下,有个大拿写了处理脚本: http://www.51testing.com/html/00/130600-220288.html


#!/bin/bash
if (( $# != 2))
then
    echo "usage:num1-Please enter the number of script. execution"
    echo "usage:num2-Please enter a value for rest time"
    exit 1
fi

sar -d 0 | head -3 | tail -1 > dev8-0.log
sar -u 0 | head -3 | tail -1 > cpu.log
sar -r 0 | head -3 | tail -1 > mem.log
echo "" > loadAverage.log
for ((i=1;i<=$1;i++))
do
    sar -d 1 | grep dev8-0 | grep -v Average >> dev8-0.log
    sar -u 1 | head -4 | tail -1 >> cpu.log
    sar -r 1 | head -4 | tail -1 >> mem.log
    monitorDate=`date +'%F %T'`
    load=`w | grep 'load average' | awk -F ',' {'print $4,$5,$6'}`
    echo $monitorDate $load >> loadAverage.log
    sleep $2
done


试了下效果不错,所以我自己照着写了一个:




#!bin/bash


for((i=1;i<4;i++))       //这里奇怪的是for循环为啥要加两层括号,单层就是不行。。。。
do
  sar -d 1 |head -4 |tail -1 >>disk_io.log
done


结果:

03:37:36 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:37:37 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:37:38 PM    dev8-0      1.98      0.00     23.76     12.00      0.01      1.00      2.00      0.40

0 0