上接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