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.txt
Per 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.txt
Queste 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;-i
per ignorare maiuscole e minuscole;-s nomeColonna
per specificare la colonna in cui cercare.