shell指令碼常用處理
阿新 • • 發佈:2018-12-04
1.日期引數轉自定義格式(注意執行命令的符號 ` 和 ‘ 的區別)
yes=$1
echo $yes
mils=`date -d "$yes -1 day" +%s` #引數日期減一天轉毫秒
echo $mils
yesterday=`date -d @$mils +%Y/%m/%d` #格式化yyyy/mm/dd形式
echo $yesterday
mils=`date -d "$yes -3 hours -1 day" +%s` # 引數日期減一天和3小時
echo $mils
2.awk字串處理(注意重定向符左端必有空格)
cat a | awk '{print $NF}' > b # 將a的最後一列擷取重定向到b sort b > c # 對b排序重定向到c sed -e '/items/d' c > d # 刪除c中含有items字元的所有行 awk '{if(NR%2!=0)ORS="\t";else ORS="\n"}1' d > e # 每兩行進行合併,並以tab分割 eg: [a] Found 2 items -rwxrwx--- 3 hdfs hdfs 1279029 2018-10-22 22:32 /tmp/1.jhist -rwxrwx--- 3 hdfs hdfs 142394 2018-10-22 22:32 /tmp/1.xml Found 2 items -rwxrwx--- 3 appsearch_dev hdfs 19667953 2018-10-22 00:39 /tmp/2.jhist -rwxrwx--- 3 appsearch_dev hdfs 142346 2018-10-22 00:39 /tmp/2.xml [e] /tmp/1.jhist /tmp/1.xml /tmp/2.jhist /tmp/2.xml awk -F , '{print $(NF-1)}' part > cost # 以,分割,拿取倒數第二列重定向到檔案cost awk -F '[:\"]' '{print $(NF-1)}' part >cost # 以:和"分割,注意轉義,拿取倒數第二列 awk '{sum += $1};END {print sum}' cost # 對cost第一列做累加並列印結果
3.字串擷取
yes=$1
ymd=`expr substr $1 1 8` # 取1-8字元,substr下標是從1開始
hh=`expr substr $1 9 2` # 從小標為9取2個字元
yes="$ymd $hh" # 拼湊日期,類似20181010 10
4.字串比較之if語句(注意[]號前後後空格)
yes=$1 mils=`date -d "$yes -3 hours -1 day" +%s` update_hour=`date -d @$mils +%H` h23="23" if [ "$h23" = $update_hour ]; then #exec your conmand fi
5.shell做運算(注意括號的使用規範)
#shell指令碼資料做運算,資料格式為每行2個數,以除法為例。求出第二個數/第一個數,最後再累加 sum=0 cat test.txt | while read line # while按行讀,for會把一行兩個數拆分成兩行資料 do time=`echo $line | awk '{print $1}'` mem=`echo $line | awk '{print $2}'` res=$(echo "$mem/$time" | bc) #浮點除法,加bc sum=$(($res+$sum)) #算術運算,使用雙括號方式 echo $sum done