我使用 CSV 文件,有时需要从命令行快速检查行或列的内容。在很多情况下cut
,、、、和朋友就可以完成这项工作head
;tail
然而,cut 不能轻易处理诸如
"this, is the first entry", this is the second, 34.5
在这里,第一个逗号是第一个字段的一部分,但cut -d, -f1
不同意。在我自己编写解决方案之前,我想知道是否有人知道已经存在适合这项工作的好工具。它至少必须能够处理上面的示例并从 CSV 格式的文件返回一列。其他理想的功能包括能够根据第一行中给出的列名称选择列、支持其他引用样式以及支持制表符分隔文件。
如果您不知道这样的工具,但有关于在 Bash、Perl 或 Python 或其他常见脚本语言中实现这样的程序的建议,我不会介意这样的建议。
答案1
我可能有点晚了,但还有另一个工具值得一提:csvkit。
它有很多命令行工具,可以:
- 重新格式化 CSV 文件,
- 从各种格式(JSON、SQL、XLS)与 CSV 相互转换,
- 相当于
cut
、grep
和sort
其他,但支持 CSV, - 连接不同的 CSV 文件,
- 对 CSV 文件中的数据执行一般 SQL 查询。
答案2
你可以使用Python的csv
模块。
一个简单的例子:
import csv
reader = csv.reader(open("test.csv", "r"))
for row in reader:
for col in row:
print col
答案3
磨坊主是另一个用于操作基于名称的数据的好工具,包括 CSV(带标题)。要提取 CSV 文件的第一列,而不关心其名称,您可以执行类似的操作
printf '"first,column",second,third\n1,2,3\n' |
mlr --csv -N cut -f 1