将bcp文件转换为标准csv文件

时间:2016-05-03 19:43:31

标签: perl shell csv bcp csvkit

我正在寻找可以将我的bcp文件转换为csv文件的任何已知工具或脚本。

输入bcp文件格式:

  1. 由' XXXXXXX'
  2. 分隔的字段
  3. 以' YYYYYYY'
  4. 分隔的行数
  5. 字段包含特殊字符,如CRLF,CR,LF,",Tab,逗号等......
  6. 我想要的输出格式:

    1. 带逗号分隔的标准csv格式文件
    2. 字段值应包含包含特殊字符的原始内容(我的意思是不添加或删除特殊字符,CR也不应删除)
    3. 该文件能够按列索引/名称剪切以选择感兴趣的列。
    4. 为此,我做了以下事情:

      1. 使用少量sed命令将bcp文件转换为csv,这样我可以在MS excel程序中打开正确对齐的文件,我可以看到内容未被更改(如预期的那样)。

        sed -i 's/\"/\"\"/g' $inFile

        sed -i 's/XXXXXXX/","/g' $inFile

        sed -i 's/YYYYYYY/"\n"/g' $inFile

        sed -i '1s/^/\"/' $inFile

        sed -i '$s/\"//' $inFile

        sed -i -e '${/^$/d}' $inFile

        sed -i '1s/^/"Header","added","here"\n/' $inFile

      2. 尝试过csvkit工具:csvcut $infile 此工具正在选择首选列,但修改内容,如删除CR。

      3. 这种转换中的任何想法?

1 个答案:

答案 0 :(得分:-1)

awk救援!

awk -F='XXXXXXX' -v RS='YYYYYYY' -v OFS='","' -v ORS='\n' 
                  '{gsub(/"/,"\""); $1=$1; print "\""$0"\""}' file

转义引号,引用字段,将字段分隔符更改为逗号并将分隔符记录到换行符。 $1=$1迫使awk应用新的分隔符。