(shell脚本)特殊分隔符文本文件导入MongoDB

前言

本篇文章简单介绍如何将文本数据使用shell脚本导入MongoDB。
过程如下:


shell脚本流程

脚本简介

分隔符替换

while read line;
do
    str = ${line//' '/''}
    str1 = ${str//'!^'/','}
    echo str1
done < ${pwd}/$1 > ${pwd_path}/process_file.txt

${str//'!^'/','} 字符替换,将 !^ 替换为 ,;
< 表示从一个文件读内容;
> 表示将内容写进一个文件,如果该文件不存在,会自动新建该文件,因此该操作会覆盖文件之前内容;
>>> ,追加模式,但是该操作不会覆盖之前文件内容。

awk命令

#awk [-F|-f|-v] ‘数据处理’ file
awk -F ',' -vq='"' '
function jsonStr(x,y){printf("%s:%s,"), x , q y q}
function jsonDci(x,y){printf("%s:%.2f,"), x, y}
function jsonEnd(x,y){printf("%s:%s)}, x, y}
            { printf "{"
            jsonStr("key", $1);
            jsonStr("key2", $2);
            jsonDci("key3", $3);
            jsonDci("key4", $4);
            jsonEnd("key5", $5);
            printf "}\n" } ' ${pwd_path}/process_file.txt >  ${pwd_path}/process_json.json

该脚本使用awk将数据转为json格式,尝试使用 -F '!^' 做为分割符时,数据处理出现丢失,错误的现象,使用 -F ',' 时,数据无误。
本次处理的文本数据分割符为特殊分割符 !^ ,因此将分隔符替换为 ,
-vq=' " ' 设置一个变量 q = "
function··· 为数据处理过程,格式化为json。

连接MongoDB

#mongo -u  -p  --host  --port port

mongo << EOF
use dbname
db.{txt_name}.drop()
EOF

EOF 之间可以执行mongo的任意操作命令。
此处删除了集合名为 ${txt_name} 的集合(无论该集合是否存在,该操作不会影响脚本执行)。

json数据导入MongoDB

mongoimpot --db dbname --collection ${txt_name} --file ${pwd_path}/process_json.json

mongoimport 将文件数据导入MongoDB,文件可以为jsoncsv 格式,此处使用的是json文件。

删除脚本生成的临时数据文件

rm -rf ${pwd_path}/process_file.txt ${pwd_path}/process_json.json

rm -rf file 强制删除文件file
rm shell 删除文件(夹)的命令
-rf 该参数表示不询问,强制删除,重要文件删除,不推荐使用该参数。

shell完整代码

#bin/bash

txt_name = ${1%.*}
echo ${txt_name}
pwd_path = `pwd`

#替换拆分符 '!^' 为 ','
while read line;
do
    str = ${line//' '/''}
    str1 = ${str//'!^'/','}
    echo str1
done < ${pwd}/$1 > ${pwd_path}/process_file.txt

#数据转化为json形式
awk -F ',' -vq='"' '
function jsonStr(x,y){printf("%s:%s,"), x , q y q}
function jsonDci(x,y){printf("%s:%.2f,"), x, y}
function jsonEnd(x,y){printf("%s:%s)}, x, y}
            { printf "{"
            jsonStr("key", $1);
            jsonStr("key2", $2);
            jsonDci("key3", $3);
            jsonDci("key4", $4);
            jsonEnd("key5", $5);
            printf "}\n" } ' ${pwd_path}/process_file.txt >  ${pwd_path}/process_json.json

#mongo -u  -p  --host  --port port
mongo << EOF
use dbname
db.{txt_name}.drop()
EOF

#json文件导入mongo
mongoimpot --db dbname --collection ${txt_name} --file ${pwd_path}/process_json.json
#删除临时过程数据文件
rm -rf ${pwd_path}/process_file.txt ${pwd_path}/process_json.json

#Finish

你可能感兴趣的:((shell脚本)特殊分隔符文本文件导入MongoDB)