如何削减csv的列

ArK*_*ArK 20 csv shell ubuntu

我有一组csv文件(大约250个),每个文件有300到500条记录.我需要从每个文件中删除2或3列并将其存储到另一个文件中.我正在使用ubuntu操作系统.有没有办法在命令或实用程序中执行此操作?

小智 28

如果您知道字段内没有列分隔符,则可以使用cut.

$ cat in.csv
foo,bar,baz
qux,quux,quuux
$ cut -d, -f2,3 < in.csv 
bar,baz
quux,quuux
Run Code Online (Sandbox Code Playgroud)

您可以使用shell buildin'for'来遍历所有输入文件.

  • 这个答案的主要问题是`cut`不处理包含分隔符的引用字段.如果您的CSV文件包含执行此操作的数据,则您需要使用其他内容. (20认同)
  • 您可以使用以下内容对scalably处理所有文件:find"*.csv"| xargs cut -d,-f2,3> out.csv (2认同)
  • 如果要删除逗号或将其更改为其他内容,可以使用`cut`的`--output-delimiter = STRING`选项. (2认同)

gle*_*man 11

如果字段可能包含分隔符,则应该找到可以解析CSV文件的库.通常,通用脚本语言将在其标准库中包含CSV模块.

Ruby:   require 'csv'
Python: import csv
Perl:   use Text::ParseWords;
Run Code Online (Sandbox Code Playgroud)

  • 虽然答案确实为我们指明了方向,但如果它包含完整的解决方案,那将会受益匪浅。 (3认同)

D B*_*Bro 9

如果您的字段包含逗号或换行符,则可以使用我编写的帮助程序来允许剪切(以及其他UNIX文本处理工具)正确处理数据.

https://github.com/dbro/csvquote

此程序在引用字段中查找特殊字符,并暂时用非打印字符替换它们,这不会混淆剪切程序.然后他们在完成切割后恢复.

卢茨的解决方案将成为:

csvquote in.csv | cut -d, -f2,3 | csvquote -u 
Run Code Online (Sandbox Code Playgroud)