如何在 bash 中将管道分隔文件转换为 CSV 格式?

Rol*_*ndo 3 bash sed

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

Some Writing, Is|Another Field|Anotherfie,ld.
Some Writing, Is|Another Field|Anotherfie,ld.
Run Code Online (Sandbox Code Playgroud)

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

"Some Writing, ","Another Field","Anotherfie,ld."
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 5

使用 sed:

sed 's/^/"/;s/|/","/g;s/$/"/' file
Run Code Online (Sandbox Code Playgroud)

输出:

“一些写作,是”,“另一个领域”,“另一个领域,ld”。
“一些写作,是”,“另一个领域”,“另一个领域,ld”。

如果您想“就地”编辑文件,请添加 sed 的选项-i


nsi*_*t22 5

您可以使用sed它的替换命令:

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

所以最终命令将是:

`cat filename.in | sed 's/^/"/;s/|/","/g;s/$/"/` > filename.out`
Run Code Online (Sandbox Code Playgroud)