最近發現自己都在複習一些好像很基本的東西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
參考資料
留言列表