1、大段原样输出
cat<<EOF
<cf> MIN </cf>
<pdp_per_row> 1 </pdp_per_row> <!-- 300 seconds -->
<params>
<xff> 5.0000000000e-01 </xff>
</params>
<cdp_prep>
<ds>
<primary_value> 0.0000000000e+00 </primary_value>
<secondary_value> 0.0000000000e+00 </secondary_value>
<value> NaN </value>
<unknown_datapoints> 0 </unknown_datapoints>
</ds>
<ds>
<primary_value> 0.0000000000e+00 </primary_value>
<secondary_value> 0.0000000000e+00 </secondary_value>
<value> NaN </value>
<unknown_datapoints> 0 </unknown_datapoints>
</ds>
</cdp_prep>
<database>
EOF
|
2、时间戳转换
date -d "1970-01-01 UTC $timestamp seconds" "+%F %R:%S"
date -d "$time" "+%s"
举例说明吧:
[root@nagios1 /root]
#date -d "1970-01-01 UTC 1229938632 seconds" "+%F %R:%S"
2008-12-22 17:37:12
[root@nagios1 /root]
#date -d "2008-12-22 17:37:12" +%s
1229938632
|
3、IFS的在文本处理中的活用
IFS=$'\012'
for i in $(< /tmp/www)
do
echo $i;
done
|
这里的\012写成\n作用一样的
4、awk行求和——对rrd fetch后的数据进行运算
比如memory fetch后原始数据如下(timeD timeS used free buffers cached)
2008-12-02 10:08:00 753298082.130 380356266.670 247631411.200 2028200064.000
2008-12-02 10:16:00 755502165.330 376745301.330 247631872.000 2029606485.300
2008-12-02 10:24:00 749963861.330 380846805.330 247631872.000 2031043285.300
2008-12-02 10:32:00 744809728.000 384621226.670 247633450.670 2032421418.700
2008-12-02 10:40:00 752522752.000 375619669.330 247635968.000 2033707434.700
2008-12-02 10:48:00 752774784.000 374078378.670 247635968.000 2034996693.300
2008-12-02 10:56:00 757586133.330 367977813.330 247636010.670 2036285866.700
2008-12-02 11:04:00 760353877.330 363706069.330 247640064.000 2037785813.300
|
一般的处理10天以上这种数据就会比较慢了,效率是秒级别的了,但这里我们用awk来计算
#time awk '{print($1,$2,$3=="NAN"?"":$3*100/($3+$4+$5+$6)"%")}' mem_sample.txt>/tmp/mem_result.txt
real 0m0.014s
user 0m0.012s
sys 0m0.002s
|
处理后的结果是:
2008-12-02 10:08:00 22.0942%
2008-12-02 10:16:00 22.1588%
2008-12-02 10:24:00 21.9964%
2008-12-02 10:32:00 21.8452%
2008-12-02 10:40:00 22.0714%
2008-12-02 10:48:00 22.0788%
2008-12-02 10:56:00 22.22%
2008-12-02 11:04:00 22.3011%
|
awk对列求和
/bin/ps axwo 'pcpu pmem comm args'|grep <进程名或进程参数,如httpd>|grep -v grep|awk '{(total_cpu+=$1);(total_memory+=$2)};END{print total_cpu,total_memory}'
5、删除所有空目录
find . -type d -empty \( -exec rm -r {} \; -a -prune \)
|
或者删除一天前的目录
find ./ -type d -mtime +1 -print | xargs rm -r
|
删除文件可以同理
find ./ -type f -mtime +1 -print | xargs rm -f
|
6、抓取某页面的返回时间
curl -o /dev/null -s -w "%{time_connect}:%{time_starttransfer}:%{time_total}\n" www.google.cn
0.087:0.240:0.323
|
time_connect 建立到服务器的 TCP 连接所用的时间
time_starttransfer 在发出请求之后,Web服务器返回数据的第一个字节所用的时间
time_total 完成请求所用的时间
7、命令行小技巧
!* 将代替上一个命令的所有参数,(!! 是整条命令和所有参数)
!$ 上一条命令的最后一个参数
!:3 上一条命令的第3个参数
!CommandName 历史中最后一次执行该命令的方式去执行该命令,同ctrl+r差不多
8、批量更改文件名编码
convmv -f gb2312 -t utf-8 *.txt --notest
|
将*.txt 的文件从gb2312转为utf8。
-f enc encoding *from* which should be converted
-t enc encoding *to* which should be converted
9、修改图片的尺寸大小
find ./ -name '*.jpg' -exec convert -resize 600x480 {} {} \;
|
10、如何调试bash程序
(1)使用 echo 和 exit 来调试。
方法就是在适当的位置加上 echo 和 exit 来输出和终止shell脚本,从而达到调试的目的。
(2)使用 trap 来调试
使用 trap 的(EXIT ERR DEBUG)来调试跟中shell。
(3)使用 tee
就是把标准输出放进文件里,在使用管道的shell中调试必备。
(4)使用 bash 的内建参数调试
-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令
注意使用 PS4 的功能扩展调试方法。
(5)使用专门的软件调试
例如 bashdb
11、利用awk进行浮点数大小比较
-
echo 123.45 123.44 | awk '{if($1>$2){printf"%f greater then %f\n",$1,$2}else{printf"%f less then %f\n",$1,$2}}'
12、无交互修改passwd
linux:
echo “123″ | passwd --stdin root
ubuntu:
echo 'root:123' | chpasswd
13、printf虽然效率比echo差很多,但是有时也有奇效。
#printf "%'d\n" 1234567
1,234,567
|
14、文件比较
small_file是large_file的子集群,:
for i in `cat large_file.txt`; do grep -w $i small_file.txt > /dev/null; if [ $? -ne 0 ];then echo $i; fi; done
阅读(1801) | 评论(0) | 转发(0) |