Supondo que não haja vírgulas incorporadas, o awk é perfeito para isso.
awk -F , '$4 == "abc" { print }' input.csv
Eu tenho um arquivo CSV com 4 colunas: Nome do item, Valor, Descrição e componente, que é bastante grande.
Eu tenho que gerar um modelo do arquivo CSV acima que exibe apenas as linhas do componente especificado (digamos, component = 'abc', que é o critério de pesquisa)
Supondo que não haja vírgulas incorporadas, o awk é perfeito para isso.
awk -F , '$4 == "abc" { print }' input.csv
Eu usei outra ferramenta no csvkit: csvgrep
.
$ csvgrep -c 4 -m "abc" data.csv > test.csv
Este é o conteúdo resultante do arquivo test.csv
:
Itemname,Value,Description,Component
33,34,35,abc
-c
é para designar a coluna para procurar. você também pode usar o cabeçalho, apenas certifique-se de soletrá-lo exatamente da mesma forma, maiúsculas e minúsculas:
$ csvgrep -c Component -m "abc" data.csv > test.csv
Itemname,Value,Description,Component
33,34,35,abc
e -m
é padrão de correspondência, tenho certeza de que há uma maneira de usar expressões regulares se você quiser aprofundar sua correspondência. então é colocado em um novo arquivo chamado test.csv
.
Com o seguinte 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
Usando csvkit
:
$ csvsql --query "SELECT * FROM data WHERE Component = 'abc'" data.csv
Itemname,Value,Description,Component
33,34,35,abc
Tags csv