2017-03-06 77 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 

谢谢