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

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 了。

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页