VisiData: salvare una procedura e applicarla ad altri file

Andrea Borruso
mai più senza
Published in
3 min readFeb 27, 2021

➡NOTA BENE: questo tutorial è uno dei paragrafi della guida VisiData.

Introduzione

In VisiData è possibile salvare il log delle operazione fatte e riutilizzarlo per applicarle nuovamente al file di input.

Se ad esempio a partire da questo file CSV (sotto l'anteprima) si volessero cancellare tutte le righe che contengono il solo carattere a nella prima colonna e infine salvare l'output, la procedura è:

  • vd input.csv;
  • posizionarsi nella prima colonna e pigiare | per attivare la selezione tramite espressione regolare, scrivere ^a$ e premere INVIO. Verrà fatta la selezione descritta;
  • pigiare in sequenza g e d per cancellare le righe selezionate;
  • poi CTRL+s;
  • infine scegliere un nome di output (ad esempio output.csv) e pigiare INVIO per salvare il file.

Per salvare la procedura di sopra in un file di log, bisognerà premere CTRL+d, scegliere un nome per salvare il file (ad esempio cancella_le_a.vd) e pigiare INVIO.

Il file di log salvato avrà un contenuto come quello sottostante (è un file TSV), in cui sono "mappate" tutte le operazioni fatte:

Per riapplicare la stessa procedura al file, senza interagire con lo schermo, il comando da lanciare è:

vd -b -p cancella_le_a.vd
  • -b per eseguire VisiData senza attivarne l'interfaccia;
  • -p per replicare un file di log.

Se questo comando si lancia dopo avere già creato il file di output, si avrà un messaggio di errore, che avvisa che il file esiste già e non può essere sovrascritto.
Per fare in modo che venga sovrascritto bisognerà aggiungere l’opzione -y:

vd -y -b -p cancella_le_a.vd

A schermo verrà restituito l’elenco delle operazione svolte:

opening cancella_le_a.vd as vd
"input.csv"
opening input.csv as csv
select rows matching regex in current column
"^a$"
search wrapped
2 matches for /^a$/
selected 2 rows
delete (cut) selected rows and move them to clipboard
copied 2 rows to clipboard
deleted 2 rows
save current sheet to filename in format determined by extension (default .tsv)
"output.csv"
saving 1 sheets to output.csv as csv
replay complete

Applicare le stesse procedure a un file diverso, ma omologo

Spesso si ha la necessità di applicare una stessa procedura ad altri file, con la stessa struttura, ma con contenuti differenti.
Per utilizzare il file di log creato con un file diverso da input.csv, bisognerà modificare il file di log (si modifica con qualsiasi editor di testo):

  • rimuovere la riga con il riferimento a input.csv
  • rimuovere il riferimento al nome del foglio (qui è input, come il nome del file).

Diventerà quindi:

Fatto questo, il comando da usare con un nuovo file denominato ad esempio input_nuovo.csv sarà:

vd -y -b -p cancella_le_a.vd input_nuovo.csv

In output verrà creato il file output.csv.

Se si vuole creare un file di output con nome diverso, si deve cancellare dal file di log la riga in cui si fa riferimento a output.csv e lanciare il comando:

vd -y -b -p cancella_le_a.vd input_nuovo.csv -o output_nuovo.csv

Nota sul file di log

Si tratta di un TSV, è possibile leggerlo con un client dedicato. Quindi si può modificare proprio con VisiData:

--

--

Andrea Borruso
mai più senza

#data #maps #GIS #baci #condivisione. Orgoglioso di essere presidente di @ondatait