(shell脚本)特殊分隔符文本文件导入MongoDB
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(shell脚本)特殊分隔符文本文件导入MongoDB相关的知识,希望对你有一定的参考价值。
参考技术A 本篇文章简单介绍如何将文本数据使用shell脚本导入MongoDB。
过程如下:
$str//\'!^\'/\',\' 字符替换,将 !^ 替换为 , ;
< 表示从一个文件读内容;
> 表示将内容写进一个文件,如果该文件不存在,会自动新建该文件,因此该操作会覆盖文件之前内容;
>> 同 > ,追加模式,但是该操作不会覆盖之前文件内容。
该脚本使用awk将数据转为json格式,尝试使用 -F \'!^\' 做为分割符时,数据处理出现丢失,错误的现象,使用 -F \',\' 时,数据无误。
本次处理的文本数据分割符为特殊分割符 !^ ,因此将分隔符替换为 , 。
-vq=\' " \' 设置一个变量 q = " 。
function··· 为数据处理过程,格式化为json。
EOF 之间可以执行mongo的任意操作命令。
此处删除了集合名为 $txt_name 的集合(无论该集合是否存在,该操作不会影响脚本执行)。
mongoimport 将文件数据导入MongoDB,文件可以为 json 或 csv 格式,此处使用的是json文件。
rm -rf file 强制删除文件 file
rm shell 删除文件(夹)的命令
-rf 该参数表示不询问,强制删除,重要文件删除,不推荐使用该参数。
shell 脚本编程总结
shell 脚本编程总结(一)
文本处理工具awk
awk是基于列的文本处理工具。它的功能强大,在shell编程中用着广泛的应用。下面以示例的方式解释awk的常用操作。
为了更好的操作awk,为此创建文件abc.txt。字符串之间都以Tab作为分隔符。文件内容如下:
john male 30 021-1111111 a
lucy female 25 021-2222222 ab
jack male 35 021-3333333 abc
lily female 20 021-4444444 abcd
每一个列称为一个域,以此用$1,$2,$3 ...表示。其中$0代表所有域,也就是整个文件。
1、打印指定列
要想输出第一列和第二列的信息,就要用到$1 $2。具体命令如下:
cat abc.txt | awk ‘{print $1,$2}‘
2、变量NF
NF是内部变量。NF存放着每一行的列的个数,也就是每行域的总数。具体示例如下:
查看每一行的域的总数:cat abc.txt | awk ‘{print NF}‘
有了以上认识,接下来就不难理解$NF。$NF表示每一行最后一个域的值。变量$(NF-1)表示一行中倒数第二个域的值。以此类推$(NF-2)代表什么就明白了吧!示例代码如下:
cat abc.txt | awk ‘{print $(NF-4),$(NF)}‘
3、截取指定的字符串
截取字符串函数是substr(指定域,开始字符位置,结束字符位置)。例如获取$4中的"021-",命令如下:
cat abc.txt | awk ‘{print substr($4,1,4)}‘
如果想要获取"-"后边的字符,就需要用substr($4,5),意思是截取$4域的第五个字符开始的所有字符。命令如下:
cat abc.txt | awk ‘{print substr($4,5)}‘
4、获取字符串长度
利用内部变量length可以获得每行字符串的长度。获取每行的字符长度,示例如下:
cat abc.txt | awk ‘{print length}‘
获取$5的字符串长度,示例如下:cat abc.txt | awk ‘{print length($5)}‘
5、求和
求$3的和,示例如下:cat abc.txt | awk ‘BEGIN{total=0}{total+=$3}END{print total}‘
6、条件查询
输出jack的所有信息。示例如下:awk ‘$1=="jack" {print $0}‘ abc.txt
以上是关于(shell脚本)特殊分隔符文本文件导入MongoDB的主要内容,如果未能解决你的问题,请参考以下文章