Le utility Linux, sono come gli oggetti nella tasca di Eta Beta

L’esempio di sponge

Andrea Borruso
mai più senza
2 min readMar 13, 2021

--

Passano gli anni e non finisco mai di scoprire le utility del mondo Linux. Anzi preciso meglio: utility del mondo Linux che mi tornano utili.

La più recente è sponge. Quando l’ho scoperta, per caso, ho letto la descrizione e ho pensato “e allora?”; mi sembrava totalmente inutile.
Però il sito che me l’ha fatta adocchiare è “figo”, quindi sospettavo fossi tonto io a non capirne l’utilità. Era così, e leggi e rileggi, ho capito anche io perché.

Quando nella shell di Linux scrivi su file — cat ./input.csv >./output.csv — il file di output viene subito creato e gradualmente “riempito” con i dati che riga per riga arriveranno dall’input.
Quindi se ad esempio voglio applicare il comando head a un file per estrarre le prime 10 righe e sovrascriverlo, lo distruggerò, perché viene creato subito e quindi sarà vuoto. Il comando <./input.csv head >./input.csv sarebbe distruttivo.

sponge risolve questo problema: prima di creare l’output si prende in memoria tutto ciò che gli arriva e poi crea il file. Quindi può anche sovrascrivere l’input, perché lo farà “a cose fatte”:

<./input.csv head | sponge ./input.csv

Tante volte — se l’utility usata non ce l’ha tra le opzioni — per sovrascrivere un file a valle di un processo è necessario creare un file temporaneo. sponge dà la possibilità di non farlo.

Occhio: mette tutto in memoria, quindi attenzione alle dimensioni dell’input.

--

--

Andrea Borruso
mai più senza

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