根据列值选择 CSV 文件中的行

根据列值选择 CSV 文件中的行

我有一个包含 4 列的 CSV 文件:项目名称、值、描述和组件,该文件相当大。

我必须从上面的 CSV 文件生成一个模板,该文件仅显示指定组件的行(例如,组件='abc',这是搜索条件)

答案1

假设没有嵌入逗号,awk 非常适合此操作。

awk -F , '$4 == "abc" { print }' input.csv

答案2

我使用了 csvkit 中的另一个工具:csvgrep

$ csvgrep -c 4 -m "abc" data.csv > test.csv

这是文件的结果内容test.csv

Itemname,Value,Description,Component
33,34,35,abc

-c是指定要查看的列。您也可以使用标题,只需确保拼写完全相同,大写字母很重要:

$ csvgrep -c Component -m "abc" data.csv > test.csv

Itemname,Value,Description,Component
33,34,35,abc

并且-m是匹配模式,我很确定如果您想更深入地匹配,有一种方法可以使用正则表达式。然后它被放入一个名为test.csv.

答案3

具有以下内容data.csv

Itemname,Value,Description,Component
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16
17,18,19,20
21,22,23,24
25,26,27,28
29,30,31,32
33,34,35,abc
37,38,39,40
41,42,43,44
45,46,47,48
49,50,51,52
53,54,55,56
57,58,59,60
61,62,63,64
65,66,67,68
69,70,71,72
73,74,75,76
77,78,79,80
81,82,83,84
85,86,87,88
89,90,91,92
93,94,95,96
97,98,99,100

使用csvkit:

$ csvsql --query "SELECT * FROM data WHERE Component = 'abc'" data.csv
Itemname,Value,Description,Component
33,34,35,abc

相关内容