Script invece di programmi (cont.)

Continuo dal post precedente, questo qui.

peteris-krumins-small

Era rimasta da fare un’ultima operazione, eliminare le righe ripetute nel file. Cosa posta come quiz per volonterosi avventurieri della shell. Ma è troppo facile con il web! Una volta, quando il mondo era giovane, si sarebbe dovuto ricorrere alla consultazione di manuali e amici più bravi e fare tentativi con il capo che ti guardava da dietro le spalle continuando a ripetere “Allora…”. OK, tempi passati, siamo o no nel XXII secolo? (Per il Mondo Disco il secolo del Pipistrello della Frutta, ovviamente).

OK, con Google si trova subito: Bash – remove duplicates without sort in cui Jotne dice:

Try:
awk '!a[$0]++' file

poi aggiunge:

Use Google Or read section 43 [of] Famous Awk One-Liners Explained, Part II: Text Conversion and Substitution

che inizia così:

43. Remove duplicate, nonconsecutive lines.

awk '!a[$0]++'

This one-liner is very idiomatic. It registers the lines seen in the associative-array “a” (arrays are always associative in Awk) and at the same time tests if it had seen the line before. If it had seen the line before, then a[line] > 0 and !a[line] == 0. Any expression that evaluates to false is a no-op, and any expression that evals to true is equal to “{ print }“.

OK! allora ecco lo script deldup.sh:

#!/bin/sh
awk '!a[$0]++' dup-t > dup-ok
wc -l dup-t dup-ok

deldup

Per verificare il risultato anticamente si sarebbe usato diff (o qualcosa di simile), adesso c’è meld:

meld

Per me l’argomento è chiuso, martedì ne parlo con tehBoss, chissà (quelli continuano a usare Windoze) 🙄
(per via di AutoCAD, mi dicono) :mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Trackback

  • Ancora script | Ok, panico su 22 febbraio 2014 alle 13:17

    […] primo tentativo, anche senza la mia assistenza Sto parlando degli script che ho raccontato qui e qui. E la novità è che si vuole continuare su questa strada. Come ogni cosa nuova (sì ho convertito […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: