Avevo bisogno di filtrare un file CSV di grandi dimensioni, compresso in zip, a partire da una lista di stringhe contenute in un file.
Dato il CSV, volevo estrarne soltanto le righe che contenevano una delle stringhe presenti nel file esterno.
Via CLI, usando lo straordinario grep il comando è (list.txt, è il file che contiene per ogni riga la stringa da cercare):
unzip -qq -c "input.zip" | grep -F -f list.txtPer me questa modalità ha risolto tutto. Ma ne metto un paio di altre.
Una è basata su ripgrep, un’altra straordinaria CLI per la ricerca di testo, più rapida di grep:
unzip -qq -c "input.zip" | rg -F -f list.txtQueste due modalità non tengono però conto del formato CSV, non riescono ad esempio a cercare per colonna, ma solo per riga. Sotto una soluzione che riesce a farlo.
Con qsv, è possibile ricercare per colonna:
unzip -qq -c "input.zip" | qsv searchset -d "|" -i -s nomeColonna list.txt-d "|"per impostare il separatore di colonna del CSV;-iper ignorare maiuscole e minuscole;-s nomeColonnaper specificare la colonna in cui cercare.