close

最近發現自己都在複習一些好像很基本的東西0.0

以前沒學好只好現在慢慢補XD

 

就要寫shell script讓程式抓一些資料庫中的資料

然後想要設一些條件  同時讓抓出的資料可以有適當的檔名這樣

直接用程式碼解釋比較快XD

TYPE'LIST=(11 13 14 15 16 111)

NAMELIST=("wood" "king" "diamond" "black" "platinum" "monster")

for (( j = 0; j < ${#TYPELIST[@]}; ++j ))
do

tmpSql="mysql -u【帳號】 -h【host位址】 【資料庫名稱】 -e \"
SELECT 【想要抽出的欄位】 FROM 【資料表名稱】 WHERE TYPE = ${TYPELIST[$j]};\" | sed -e 's/\t/,/g'
> 檔名_${NAMELIST[$j]}.csv";

#SQL実行
eval $tmpSql

done

於是產出的檔案內容就會是該資料表中TYPE符合TYPELIST陣列宣告的東西

檔名會像檔名_wood.csv

檔名_king.csv ~~之類

 

順便附上如何使用bash抽出指定日期間資料的程式碼

首先先指定期間

startDate="2016-12-02 15:00:00" #開始日期
endDate="2016-12-12 13:00:00" #結束日期
year=`date "+%Y" -d "$startDate"`  #只抽出開始日期 年的部分
month=`date "+%m" -d "$startDate"` #只抽出開始日期 月的部分
day=`date "+%d" -d "$startDate"` #只抽出開始日期 日的部分
day2=`date "+%d" -d "$endDate"` 只抽出結束日期 日的部分

之後詳細程式碼如下

for i in `seq $day $day2`;
do

tmpDay=$year-$month-$i
tmpNextDay=$year-$month-`expr $i + 1`

if [ $tmpDay == `date "+%Y-%m-%d" -d "$startDate"` ]

then

startTime=`date "+%H:%M:%S" -d "$startDate"`
endTime="00:00:00"

elif [ $tmpDay == `date "+%Y-%m-%d" -d "$endDate"` ]
then

startTime="00:00:00"
endTime=`date "+%H:%M:%S" -d "$endDate"`
tmpNextDay=$year-$month-$i

else

startTime="00:00:00"
endTime="00:00:00"

fi
tmpSql="mysql -u【帳號】 -h【host位址】 【資料庫名稱】 -e \" SELECT * FROM  【資料表名稱】 WHERE 【指定的時間欄位名稱】 >= '$tmpDay $startTime'
AND 【指定的時間欄位名稱】 < '$tmpNextDay $endTime';\" | sed -e 's/\t/,/g' > 檔名_$year$month${i}.csv";

#SQL実行
eval $tmpSql

done

就會自動把2016/12/02 15:00~2016/12/12 13:00之間指定的資料 以天為單位放進檔名後面是日期的csv裡面

(12/02會從15:00開始拿資料  12/12會拿到13:00為止)

 

嗯,比想像中簡單很多XD

 

參考資料

http://bi.biopapyrus.net/linux/bash.html

arrow
arrow

    holmes310524 發表在 痞客邦 留言(0) 人氣()