如何“剪切”(提取列的子集)包含带引号的字符串的 CSV 文件

如何“剪切”(提取列的子集)包含带引号的字符串的 CSV 文件

我有一个 CSV 文件,想丢弃几列。假设这是一个示例文件:

column a, column b, column c
value  a, value  b, value  c
value  a, "quoted, b", value c

现在假设我们要丢弃 b 列,那么结果就是:

column a, column c
value  a, value  c
value  a, value c

如果没有引用字符串“quotated, b”,我可以用以下方法执行此操作cut

cut -d ',' -f 1,3

但是有这个引号字符串。我可以用 libreoffice 加载文件,但除了不太酷和自动化之外,我的文件有几百 MB,有些甚至超过了 LibreOffice Calc 的最大行数。

(旁注:我的实际文件有 30 列,我想选择其中的 5-10 列。所以这不像“丢弃最后一列”)

答案1

如果你可以安装 python 和 easy_install,那么你也可以安装工具https://csvkit.readthedocs.io

现在,您可以运行如下简单命令来仅选择第 1 列和第 3 列:

csvcut -c 1,3 original_file.csv > new_file.csv

或者,另一个例子,删除第二列:

csvcut -C 2 original_file.csv > new_file.csv

..

笔记:

只是一句警告,您的 CSV 看起来无效。除非您想在数据中出现空格字符,否则逗号/分隔符后不得有空格。空格字符只是数据的一部分,可能会扰乱引用的文本。

这些数据是如何生成的?是否可以生成不带额外空格的数据?例如column a,column b,column c

相关内容