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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值