2017-03-06 80 views
0

我有一個小型腳本,它接受表中的值,然後放入csv文件中。問題是我不能根據IDRow產生多個csv文件。生成多個csv文件,具體取決於IDRow

if [ "$1" = "" ] 
then 
    echo "Database path" 
    exit 1 
fi 

if [ "$2" = "" ] 
then 
    echo "Csv file output path" 
exit 1 
fi 

db=$1 
t=($(sqlite3 $db ".tables 'myTable'")) 

for i in "${t[@]}" 
do 
    sqlite3 $db<<- EXIT_HERE 
    .mode csv 
    .separator ; 
    .output $2/$i.csv 
    SELECT IDRow,strftime('%d-%m-%Y %H:%M:%S',Date),Value FROM $i order by IDRow; 
    .exit 
    EXIT_HERE 
    echo "$i.csv generated" 
done 

我得到的csv文件是這樣的:

IDRow;日期時間;值
3; 06-03-2017 10:53:40; 120
3; 06-03-2017 10:53:41; 120
4; 06-03-2017 11:41:22; 12000
4; 2017年6月3日11:41:23; 12000
5; 2017年6月3日11:51:49; 15000
5; 2017年6月3日11:51:50; 15000

我怎樣才能得到3個不同的文件?謝謝

+0

您已經有了表名的循環。添加另一個循環。 –

+0

在'order by'之前加上'WHERE id_row ='$ i'。祝你好運。 – shellter

+0

我通過添加另一個查詢和for循環找到了一個解決方案。謝謝 – dani

回答

0

這是我發現

解決方案
if [ "$1" = "" ] 
then 
    echo "Database path" 
    exit 1 
fi 

if [ "$2" = "" ] 
then 
    echo "Csv file output path" 
exit 1 
fi 

db=$1 
t=($(sqlite3 $db ".tables")) 
row=(sqlite3 $1 "select IDRow from mytable group by IDRow") 

for i in "${row[@]}"; do 
    for j in "${table[@]}"; do 
     sqlite3 $db<<- EXIT_HERE 
     .mode csv 
     .separator ; 
     .output $2/$i.csv 
     SELECT IDRow,Date,Value FROM $j order by IDRow=$i; 
     .exit 
     EXIT_HERE 
    done 
done 

謝謝