如何在Linux命令行上解析CSV文件?
做以下事情:
csvparse -c 2,5,6 filename
Run Code Online (Sandbox Code Playgroud)
从所有行中提取第2,5和6列的字段.
它应该能够处理csv文件格式:http://tools.ietf.org/html/rfc4180这意味着引用字段并根据需要转义内部引号,因此对于包含3个字段的示例行:
field1,"field, number ""2"", has inner quotes and a comma",field3
Run Code Online (Sandbox Code Playgroud)
所以,如果我请求上面一行的字段2,我得到:
field, number "2", has inner quotes and a comma
Run Code Online (Sandbox Code Playgroud)
我很欣赏有很多解决方案,Perl,Awk(等)来解决这个问题,但我想要一个本机bash命令行工具,它不需要我调用其他脚本环境或编写任何其他代码(!).
Lar*_*ari 22
csvtool非常好.可在Debian/Ubuntu(apt-get install csvtool
)中使用.例:
csvtool namedcol Account,Cost input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)
有关使用提示,请参见CSVTool手册页.
小智 20
我的FOSS CSV流编辑器CSVfix完全符合您的要求.有一个用于Windows的二进制安装程序,以及一个用于UNIX/Linux的可编译版本(通过makefile).
正如@Jonathan在评论中所建议的那样,python的模块提供了命令行工具csvfilter.它像剪切一样工作,但正确处理CSV列引用:
csvfilter -f 1,3,5 in.csv > out.csv
Run Code Online (Sandbox Code Playgroud)
如果你有python(你应该),你可以像这样安装它:
pip install csvfilter
Run Code Online (Sandbox Code Playgroud)
更多信息,请访问https://github.com/codeinthehole/csvfilter/
我发现csvkit很有用,它基于python csv模块,并且有很多选项可用于解析复杂的csv文件.
虽然看起来有点慢.当从具有5列的7GB csv中提取一个字段时,我得到4MB/s(100%cpu).
从中提取第4列 file.csv
csvcut -c 4 file.csv
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49956 次 |
最近记录: |