我想将逗号分隔的csv文件转换为pipe(|)。但是在csv文件中,一些行也应该有逗号,
我的档案
$ cat a.txt
"a","b","c,test","new","abc"
期待:
a|b|c,test|new|abc
答案 0 :(得分:1)
这个sed
命令将执行:
sed 's/","/\|/g; s/"//g' File
将所有","
模式替换为|
。这将在两端都有"
,稍后会删除。
<强>示例:强>
AMD$ cat File
"a","b","c,test","new","abc"
AMD$ sed 's/","/\|/g; s/"//g' File
a|b|c,test|new|abc
答案 1 :(得分:1)
sed ':cycle
s/^\(\("[^"]*"[|]\{0,1\}\)*\),/\1|/
t cycle' YourFile
[|]\{0,1\}
的快捷方式,假设没有"foo"|,
或"foo",,
(空字段为""
)答案 2 :(得分:1)
CSV手动操作非常棘手。我会使用带有正确CSV解析器的语言。例如,使用ruby:
$ ruby -rcsv -ne 'puts CSV.generate_line(CSV.parse_line($_), :col_sep=>"|")' a.txt
a|b|c,test|new|abc
循环遍历文件的行,使用默认值(逗号分隔,双引号作为引号字符)将其解析为数组,然后使用管道作为分隔符生成新的CSV字符串。如果某个字段包含管道符,则会引用该字段。
此解析器无法处理带引号的字段中的嵌入换行符。 Perl的Text::CSV可以。
答案 3 :(得分:1)
$ awk -F'","' -v OFS='|' '{$1=$1; gsub(/"/,"")} 1' a.txt
a|b|c,test|new|abc
答案 4 :(得分:0)
您可以通过以下方式使用perl:
a:hover {
color: whatever color you want;
}