Operatore IN fuori da ambiente SQL

Come realizzare l’operatore IN in un ambiente diverso dal 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)$.

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

Riferimenti utili

  1. Miller
  2. VisiData
  3. regex
Ultima modifica 13/12/2020: update ricetta operatore IN (cfb97ae)