如何在bash中将竖线定界文件转换为CSV格式?

时间:2016-02-02 18:48:24

标签: bash sed

我有一个巨大的300MB文本文件,它是一个以管道分隔的CSV。

Some Writing, Is|Another Field|Anotherfie,ld.
Some Writing, Is|Another Field|Anotherfie,ld.

bash shell中有没有办法将其转换为:

"Some Writing, ","Another Field","Anotherfie,ld."

3 个答案:

答案 0 :(得分:3)

使用sed:

sed 's/^/"/;s/|/","/g;s/$/"/' file

输出:

"Some Writing, Is","Another Field","Anotherfie,ld."
"Some Writing, Is","Another Field","Anotherfie,ld."

如果您要“就地”修改文件,请添加sed的选项-i

答案 1 :(得分:1)

使用awk你可以这样做:

awk -F '|' -v OFS=, '{for(i=1; i<=NF; i++) $i="\"" $i "\""} 1' file.csv
"Some Writing, Is","Another Field","Anotherfie,ld."
"Some Writing, Is","Another Field","Anotherfie,ld."

答案 2 :(得分:1)

您可以使用sed及其替换命令:

s/^/"/将在每行的开头替换(插入)"符号 s/|/","/g会将每个|字符替换为","三元组。请注意命令末尾的g字母,该字母指示它替换每个 |次出现,而不仅仅是第一次出现。
最后:
s/$/"/会在每行末尾替换(附加)"个符号。

所以最后的命令是:

`cat filename.in | sed 's/^/"/;s/|/","/g;s/$/"/` > filename.out`