(shell脚本) 含特殊分隔符‘^‘的文件数据导入MongoDB(1)

前言

本篇文章简单介绍使用shell脚本将文本数据转为JSON格式导入MongoDB。
下篇文章介绍
《将文件数据转为csv格式导入MongoDB(2)》
链接:
https://blog.csdn.net/qq_43380180/article/details/109364724
过程如下:

源数据
分隔符是否为特殊分隔符 ^
特殊分隔符 ^
数据格式预处理
awk处理数据转为Json
Json文件入MongoDB
普通分隔符

脚本简介

分隔符替换(字符串)—1

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

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

分隔符替换(文件)—2

sed -i "/s/!^/,/g" cp_original.txt

替换文件中的字符串,将字符串!^替换为,

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 '!^' 做为分割符时,数据处理出现未分割的现象,原因是 ^ 在awk处理作为分隔符时,无法分辨,因此需要替换该分隔符。
本次处理的文本数据分割符含有特殊分割符 ^ ,因此将分隔符替换为 ,
-vq=' " ' 设置一个变量 q = "
function··· 为数据处理过程,格式化为json。

连接MongoDB

mongo -u <user> -p <password> --host <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 <user> -p <password> --host <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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值