我在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
提前谢谢......
谢谢,
答案 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
答案 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是包含逗号分隔字符串的变量