Linux将逗号分隔文件转换为管道

时间:2017-11-06 19:11:12

标签: linux shell unix awk

我在linux中使用逗号分隔文件和双引号中的字符串字段",我需要将它们转换为管道分隔符,请分享您的输入。

示例:

输入:

"2017-09-30","ACBD,TVF","01234",NULL,18,NULL,"686091802","BANK OF ABCD, LIMITED, THE",790456

输出:

2017-09-30|ACBD,TVF|01234|NULL|18|NULL|686091802|BANK OF ABCD, LIMITED, THE|790456

提前谢谢......

谢谢,

4 个答案:

答案 0 :(得分:2)

以下是使用gnu awk变量使用FPAT的解决方案:

awk -v OFS='|' -v FPAT='"[^"]*"|[^,]*' '{
   for (h=1; h<=NF; h++) printf "%s%s", $h, (h < NF ? OFS : ORS)
}' file

"2017-09-30"|"ACBD,TVF"|"01234"|NULL|18|NULL|"686091802"|"BANK OF ABCD, LIMITED, THE"|790456

Working Code Demo

答案 1 :(得分:1)

您可以使用合适的CSV解析器。这是一个Ruby示例:

ruby -rcsv -e '
  f = ARGV.shift
  csv_out = CSV.new $stdout, :col_sep => "|"
  CSV.foreach(f) {|row| csv_out << row}
' file.csv

输出

2017-09-30|ACBD,TVF|01234|NULL|18|NULL|686091802|BANK OF ABCD, LIMITED, THE|790456

答案 2 :(得分:0)

awk '{sub(/"/,"")gsub(/",|,"|","/,"|")sub(/,18,/,"|18|")}1' file

2017-09-30|ACBD,TVF|01234|NULL|18|NULL|686091802|BANK OF ABCD, LIMITED, THE|790456

答案 3 :(得分:-1)

最容易使用sed

PIPE_SEP_STR=$(echo $COMMA |sed -e 's/,/|/g')

其中COMMA是包含逗号分隔字符串的变量