使用sed准备更新命令

时间:2016-05-12 12:35:53

标签: bash shell sed

我有一个包含3个不同列数据的输出文件 -

          ['AARF'],SAMPLE12,2016-01-05 12:00:00-0500
                  ,529OFFST,2015-04-16 08:04:21-0400
          "['EPROSP_IWS', '648099_EPROSP_IWS']",4.NDR-IWS-EPRO,2015-04-16 08:04:21-0400

我尝试使用下面的sed命令 -

        sed -i "s/\(\"*\[[^]]*\]\"*\)\(.*\)/{\1:\"\"}\2/" tempFile
        sed "s/' *, *'/' '/g;s/\([^,]*\),\([^,]*\),\(.*\)/update table set cross_refs = \1 where id = \2 and effective_date = \3/;s/' '/','/g" tempFile > updatestmt.cql
        sed -i "s/$/';/" updatestmt.cql

我的预期o / p -

       update table set cross_refs ={'AARF':''}  where id = 'SAMPLE12' and effective_date = '2016-01-05 12:00:00-0500';
       update table set cross_refs = {'':''} where id = '529OFFST' and effective_date = '22016-01-05 12:00:00-0500';
       update table set cross_refs = {'EPROSP_IWS':'','648099_EPROSP_IWS':''} where id = '4.NDR-IWS-EPRO' and effective_date = '2015-04-16 08:04:21-0400';

有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

不在sed但是逗号分隔的数据等于向我awk询问:)

#!awk
BEGIN { FS = "," }  # split fields on comma
{
    gsub(/[\]\[\"]/,"")  # remove useless chars: [,],"
    i=1
    crefs="{"
    while (i <= (NF-2)) {  # loop from first to 3rd last field
        tmp = $(i) ? $(i) : "''"  # if no value, add empty quotes
        crefs=crefs""tmp":'',"  # append current field value or empty to crefs
        i++
    }
    sub(/,$/, "", crefs)  # remove trailing comma
    crefs=crefs"}"
    print "update table set cross_refs ="crefs" where id='"$(NF-1)"' and effective_date ='"$(NF)"'"
}