今天遇到一个需要批量导入csv文件的情况。
大致是这样的,一个文件夹下有一年的日志数据,该文件夹下又按12个月份创建12个文件夹,这个月份的文件夹下是每天的scv文件。
[mongo@master shells]$ cd /data/2015/
[mongo@master 2015]$ l
总用量 32
drwxrwxr-x. 2 mongo mongo 4096 1月 25 14:55 1
drwxrwxr-x. 2 mongo mongo 4096 1月 25 15:23 2
drwxrwxr-x. 2 mongo mongo 4096 1月 25 15:39 3
drwxrwxr-x. 2 mongo mongo 4096 1月 25 14:27 4
drwxrwxr-x. 2 mongo mongo 4096 1月 25 14:46 5
drwxrwxr-x. 2 mongo mongo 4096 1月 25 15:04 6
drwxrwxr-x. 2 mongo mongo 4096 1月 25 16:19 7
drwxrwxr-x. 2 mongo mongo 4096 1月 25 16:26 8
[mongo@master 1]$ pwd
/data/2015/1
[mongo@master 1]$ l
总用量 40546216
-rw-rw-r--. 1 mongo mongo 1610807 1月 25 13:42 10_bool.csv
-rw-rw-r--. 1 mongo mongo 3857068 1月 25 13:42 10_double.csv
-rw-rw-r--. 1 mongo mongo 1347192205 1月 25 13:44 10_float.csv
-rw-rw-r--. 1 mongo mongo 1656673 1月 25 13:44 11_bool.csv
-rw-rw-r--. 1 mongo mongo 4277151 1月 25 13:44 11_double.csv
-rw-rw-r--. 1 mongo mongo 1373628198 1月 25 13:45 11_float.csv
-rw-rw-r--. 1 mongo mongo 1691991 1月 25 13:45 12_bool.csv
-rw-rw-r--. 1 mongo mongo 4156328 1月 25 13:45 12_double.csv
-rw-rw-r--. 1 mongo mongo 1353254438 1月 25 13:47 12_float.csv
-rw-rw-r--. 1 mongo mongo 1649609 1月 25 13:47 13_bool.csv
-rw-rw-r--. 1 mongo mongo 4001216 1月 25 13:47 13_double.csv
-rw-rw-r--. 1 mongo mongo 1349098966 1月 25 13:48 13_float.csv
-rw-rw-r--. 1 mongo mongo 1711203 1月 25 13:48 14_bool.csv
-rw-rw-r--. 1 mongo mongo 3981629 1月 25 13:48 14_double.csv
-rw-rw-r--. 1 mongo mongo 1317977535 1月 25 13:49 14_float.csv
其中bool的文件数据导到boolLog集合中,float的文件数据导入到float表中。
我的设想是循环读取文件夹下的文件,然后判断文件名中是否包含bool或float,如果double就不管理了。
shell脚本 分享如下:
#!/bin/bash
#获取根目录
root="/data/2015"
#循环读取文件
for dir in ${root}/*; do
# 获取子目录
tmp_dir=`basename $dir`
#echo $tmp_dir
#获取文件名
for file in $dir/*; do
temp_file=`basename $file`
# 处理bool
if [[ $temp_file =~ "bool" ]]
then mongoimport -d logs -c boolLog --type csv --headerline --file ${file} -f id,time,value --ignoreBlanks
# 处理float
elif [[ $temp_file =~ "float" ]]
then mongoimport -d logs -c floatLog --type csv --headerline --file ${file} -f id,time,value --ignoreBlanks
fi
done
done