上接shell常用编程及实例 :http://blog.csdn.net/larrylgq/article/details/7333632
1:ls *|while read fn; do grep -v ',11,1108,1133,110816,110816' $fn > /data1/hadoop/back_up/tmp/${fn}_08171819; done
ls *的输出作为
|管道,前面的输出作为后面的输入
grep过滤
-v反向查找
->第一条命令的含义是遍历当前文件夹下的所有文件,使用while做循环,对每个文件执行:反向查找文件名不是',11,1108,1133,110816,110816' 的文件,以当前的文件名+_08171819为文件名将文件输出到/data1/hadoop/back_up/tmp/
2:ls *_110816*.gz | while read fn; do gunzip -c $fn > ${fn%.gz}.log; done
把*_110816*.gz匹配的压缩文件-zcvf(强制把所有信息打出来,并创建打包),-c(create)–vf(vebose,force)-x解压缩 –z(.gz)打包
->第二条命令的含义是做循环 读取(read)每一个的文件名(fn),循环体do将它打成gunzid文件然后标准输出到文件fn+gz.log
3:ls /datacenter/hadoop/back_up/20110920/view/10096|while read fn;do cut -d',' -f7 $fn;done|grep '110919'|wc –l
cut –d‘,’使用,作为分隔符 -f7找第7列
cut -b 1-10 字节
对行数(-l)进行统计
->第三条命令的含义是循环/datacenter/hadoop/back_up/20110920/view/10096文件,对每一个文件的每一条按,分割输出第7列,在这一列里面找含有‘110919’的
4:kill `ps aux|grep java|grep -v grep |awk {'print $2'}`
kill杀掉进程
kill强杀进程,反撇号会返回一个进程号
awk
{’’}循环内部
Print $2打印第二个
->第四条命令的含义是查找出不含grep的java进程,返回进程号
5:for ((i=3;i<11;i++)); do echo $i; ssh 10.10.10.$i 'find /datacenter/infobright/panel/{view,click} -type f -exec wc {} \;'; done
ssh登录10.10.10.3-11这8台机器
find查找操作
-type f查找所有的文件d是目录
-exec执行shell命令
{}\;返回又有
->第五条命令的含义是登录到3-11这8台机器查找/datacenter/infobright/panel/{view,click}下所有文件执行wc(wordcount)
find ~/桌面/日志 -type f-exec wc -l {} \;
6:根据文件名删除7天前的文件
#!/bin/bash
#删除7天前的文件
pathadx=./adx
del_date=`date +%Y%m%d -d "7 days ago"`
for n in `find ${pathadx} -name '*-r-*'`;do
file_dt=`echo $n|awk -F/ '{print $5}'|cut -b 1-8`
if [[ $file_dt < $del_date ]];then
#echo $n;
#echo $del_date;
#echo $file_dt;
rm -rf $n
fi
done