我有一个巨大的300MB文本文件,它是一个以管道分隔的CSV。
Some Writing, Is|Another Field|Anotherfie,ld.
Some Writing, Is|Another Field|Anotherfie,ld.
bash shell中有没有办法将其转换为:
"Some Writing, ","Another Field","Anotherfie,ld."
答案 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`