Eu tenho um arquivo csv gigante que tem cerca de GB em tamanho. A primeira coluna do csv contém cerca de 300 valores inteiros únicos. Eu quero processar o csv uma vez e salvar a saída para arquivos diferentes com base no valor da primeira coluna correspondente.
Eu sei que awk
solution salva a saída para valores específicos da coluna 1.
for i in $column1values; do
awk -F, -v a=$i '$1 == a' input.csv > output-$i.csv
done
Mas esta solução irá reler o grande arquivo csv toda vez que quiser encontrar o valor correspondente da coluna 1. Isso é ineficiente, considerando grande arquivo csv.
Então, como posso conseguir isso ao ler o arquivo csv apenas uma vez?
EDITAR:
Digamos que meu arquivo csv original tenha dados ..
1,r1c2,r1c3,r1c4
1,r2c2,r2c3,r2c4
2,r3c2,r3c3,r3c4
2,r4c2,r4c3,r4c4
3,r5c2,r5c3,r5c4
3,r6c2,r6c3,r6c4
E eu quero filtrar a saída com base nos valores da primeira coluna, como ..
output-1.csv:
1,r1c2,r1c3,r1c4
1,r2c2,r2c3,r2c4
output-2.csv
2,r3c2,r3c3,r3c4
2,r4c2,r4c3,r4c4
output-3.csv
3,r5c2,r5c3,r5c4
3,r6c2,r6c3,r6c4
Mais importante, quero filtrar a saída dessa maneira enquanto lemos o arquivo csv grande original apenas uma vez. Como fazer isso?