Operatore IN fuori da ambiente SQL
A cura di
Totò Fiandaca
| issue
#169
| guida/e
Andrea Borruso
Caso d’uso
Filtrare dei dati strutturati come i CSV usando l’operatore IN
; in ambiente SQLite è facilissimo, ecco un esempio:
SELECT "id", "CODICE", "foglio", "prov", "cod_com"
FROM "nomeTabella"
WHERE "foglio" IN (20,21,22)
come fare usando la riga di comando (per esempio in VisiData o/e Miller)?
input.csv:
id | NUM_PART | foglio | prov | cod_com |
---|---|---|---|---|
43 | 49 | 21 | PA | Axxx |
44 | 51 | 21 | PA | Axxx |
45 | 54 | 21 | PA | Axxx |
46 | 55 | 20 | PA | Axxx |
47 | 58 | 20 | PA | Axxx |
48 | 61 | 22 | PA | Axxx |
49 | 62 | 1 | PA | Axxx |
50 | 63 | 10 | PA | Axxx |
51 | 65 | 1 | PA | Axxx |
52 | 66 | 11 | PA | Axxx |
53 | 68 | 1 | PA | Axxx |
Soluzione
- In VisiData: utilizzando i
regex
in questo modo:
posizionare il focus sulla colonna foglio
, digitare |
(che serve a selezionare tramite regex) e come regex: (20|21|22)
; per ottenere il file con le sole righe selezionate digitare "
e poi Ctrl + s
per salvare il file.
OSSERVAZIONE: per evitare di selezionare anche valori che contenessereo 20,21 o 22 (per esempio 220,122 ecc..) occorre modificare la regex così ^(20|21|22)$
.
- con Miller
mlr --csv filter -S '$foglio=~"(20|21|22)"' test.csv >output.csv
dove -S
forza il dato come stringa.
OSSERVAZIONE: per evitare di estrarre righe con valori che contenessereo 20,21 o 22 (per esempio 220,122 ecc..) occorre modificare la regex così ^(20|21|22)$
.
output.csv:
id | NUM_PART | foglio | prov | cod_com |
---|---|---|---|---|
43 | 49 | 21 | PA | Axxx |
44 | 51 | 21 | PA | Axxx |
45 | 54 | 21 | PA | Axxx |
46 | 55 | 20 | PA | Axxx |
47 | 58 | 20 | PA | Axxx |
48 | 61 | 22 | PA | Axxx |
Prova qui
https://regex101.com/r/adgRHj/1