shell脚本――csv 文件转成能入 elasticsearch 的 json 文件

匿名 (未验证) 提交于 2019-12-03 00:26:01

csv2json.sh

#!/bin/bash handle(){     inputFile=$1     outputFile=$2     separator=$3     columnNumStr=$4     columnNameStr=$5      sed -r \     -e 's/[\\\\"\t]//g' \     -e 's/\x00/[NUL]/g' -e 's/\x01/[SOH]/g' -e 's/\x02/[STX]/g' -e 's/\x03/[ETX]/g' \     -e 's/\x04/[EOT]/g' -e 's/\x05/[ENQ]/g' -e 's/\x06/[ACK]/g' -e 's/\x07/[BEL]/g' \     -e 's/\x08/[BS]/g' -e 's/\x0A/[LF]/g' -e 's/\x0B/[VT]/g' -e 's/\x0C/[FF]/g' \     -e 's/\x0D/[CR]/g' -e 's/\x0E/[SO]/g' -e 's/\x0F/[SI]/g' -e 's/\x10/[DLE]/g' \     -e 's/\x11/[DC1]/g' -e 's/\x12/[DC2]/g' -e 's/\x13/[DC3]/g' -e 's/\x14/[DC4]/g' \     -e 's/\x15/[NAK]/g' -e 's/\x16/[SYN]/g' -e 's/\x17/[ETB]/g' -e 's/\x18/[CAN]/g' \     -e 's/\x19/[EM]/g' -e 's/\x1A/[SUB]/g' -e 's/\x1B/[ESC]/g' -e 's/\x1C/[FS]/g' \     -e 's/\1Dx/[GS]/g' -e 's/\x1E/[RS]/g' -e 's/\x1F/[US]/g' -e 's/\x70/[DEL]/g' \     -e 's/^M/[^M]/g' \     \     $inputFile | \     \     awk -F $separator '{         lens=split('$columnNumStr',columnNumArr,",");         split('$columnNameStr',columnNameArr,",");         printf "{\"index\":{}}\n{";         for (i in columnNumArr){             printf "\""columnNameArr[i]"\":\""$columnNumArr"\"";             if (i!=lens){                 printf ",";             }         }         print "}";     }' \     \     > $outputFile }  handle testData.csv testData.csv_out "," "\"1,2,3\"" "\"name,gender,age\""

其中 sed 一段是为了去除乱码,awk 一段是用拼字符串的方式构造出 json 文件。运行该 shell 脚本,即可将 testData.csv 文件中的 csv 数据转成 testData.csv_out 文件中的 json 数据。sed 一段最后对 ^M 的替换中,前一个 ^M 不能用写成 ^ 和 M,也不能复制粘贴出来,而应该按住 Ctrl,先按 v 后按 m 得到。


输入文件:testData.csv

tom,male,30 alice,female,25 bob,male,20

输出文件:testData.csv_out

{"index":{}} {"name":"tom","gender":"male","age":"30"} {"index":{}} {"name":"alice","gender":"female","age":"25"} {"index":{}} {"name":"bob","gender":"male","age":"20"}

得到 json 格式的文件 testData.csv_out 后,就可以用 curl 命令入库 elasticsearch 了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!