我有一个包含 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