字段中包含分隔符时如何分隔列

Emm*_*tin 1 linux command-line csv

我有一个包含 24 个字段的 CSV 文件。该记录类似于下面的示例。因此,某些字段的值带有“,”。如何使用分隔符?

我试图在第 9 列中找到大于 200 的值。但由于分隔符问题,我最终得到了前几列的文本。

"86680728811_10150499874478812","86680728811","fun ,celebrators.","New York City’s buildings, descend on Times Square when the iconic ball drops tomorrow...","abcnews.go.com","link","published_story","271","31","0","0","0","0","0","0","0","http://abcnews.go.com/blogs/headlines/2011/12/wishes-for-2012-to-fall-on-times-square/","https://external.xx.fbcdn.net/safe_image.php?d=AQAbTSWm1WlXInTf&w=130&h=130","2012-01-01 02:00:37"
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Sté*_*las 5

您可能想要使用知道如何解析 CSV 的工具。例如,与米勒:

mlr -N --csv filter '$9 > 200' < your-file
Run Code Online (Sandbox Code Playgroud)

使用 GNU awk,您可以设置FPAT基于它们匹配的模式而不是分隔它们的分隔符来定义字段:

gawk -v 'FPAT=[^",]*|"([^"]|"")*"' 'substr($9,2) > 200'
Run Code Online (Sandbox Code Playgroud)

这里也处理"转义为"",但假设字段值不包含换行符并且第 9字段总是嵌入在引号中。