Linux 在UNIX中从csv文件中删除双引号中的逗号

Linux 在UNIX中从csv文件中删除双引号中的逗号,linux,bash,unix,awk,sed,Linux,Bash,Unix,Awk,Sed,我有一个文件z.csv,它是csv文件。有些行中有双引号和逗号。我需要删除双引号中的逗号,然后从每条记录中删除双引号 "abc","1,234",90,1 ,"1,12,000","12,000",RTC ,,, qqq,www,222,"323" 我需要这样的输出 输出: 如果您在UNIX中有任何帮助,我们将不胜感激 $ awk '{ while ( match($0,/"[^"]*"/) ) { fld = substr($0,RSTART+1,RLE

我有一个文件z.csv,它是csv文件。有些行中有双引号和逗号。我需要删除双引号中的逗号,然后从每条记录中删除双引号


"abc","1,234",90,1

,"1,12,000","12,000",RTC

,,,

qqq,www,222,"323"

我需要这样的输出

  • 输出:
如果您在UNIX中有任何帮助,我们将不胜感激

$ awk '{
    while ( match($0,/"[^"]*"/) ) {
        fld = substr($0,RSTART+1,RLENGTH-2)
        gsub(/,/,"",fld)
        $0 = substr($0,1,RSTART-1) fld substr($0,RSTART+RLENGTH)
    }
    print
}' file
abc,1234,90,1

,112000,12000,RTC

,,,

qqq,www,222,323

如果这不是您所需要的全部,那么请参见。

一个合适的CSV解析器会自动执行此操作。请您详细说明一下。我的意思是,CSV解析器使用引号来决定哪些逗号分隔字段,哪些逗号是字段的一部分。你问的基本上是,“我如何编写CSV解析器?”是的,对不起,我从来没有这么多地使用过CSV解析器。。。很有魅力。。我将阅读更多关于CSV解析的内容。:)不客气。看看接下来要做什么。
$ awk '{
    while ( match($0,/"[^"]*"/) ) {
        fld = substr($0,RSTART+1,RLENGTH-2)
        gsub(/,/,"",fld)
        $0 = substr($0,1,RSTART-1) fld substr($0,RSTART+RLENGTH)
    }
    print
}' file
abc,1234,90,1

,112000,12000,RTC

,,,

qqq,www,222,323