AWK – raccolta di scripts – 1

Uno progetto partito e poi, per ragioni di lavoro, interrotto e che adesso riparte 😀
Consiste nella personalizzazione di scripts (spesso one-liner) AWK, copiati, adattandoli, da qui: Handy one-line scripts for AWK – Compiled by Eric Pement – eric [at] pement.org.
Alro materiale proviene da qui compilato da qualcuno di Canisius College.
Il lavoro è stato svolto da un giovane collaboratore che –prima di finire– è finito a comporre siti Web, quindi HTML, CSS, JavaScript e sinili in ambiente Microsoft (ecco, l’ecosistema). Se poi vorrà riprendere aggiornerò 😀

6a00

Il mio compito consiste nella sola pubblicazione dell’elenco, previo test 😀 se del caso con note esplicative.

Inserire una riga vuota dopo ogni riga
awk '1;{print ""}'

oppure

awk 'BEGIN{ORS="\n\n"};1'

a0

vale per tutti: scriptarlo

a1

oppure, notare awk nella shebang, la prima riga


#!/usr/bin/awk -f
awk 1;{print ""}  $*

per l’opzione -f vedere l’help; si suppone che il lettore sappia come fare, come pure altre cose normali per esempio reindirizzare l’output con > file-di-output, p.es.: ./ins-v t1.txt t2.txt > tres.

Inserire 2 righe vuote ogni riga
awk '1;{print "\n"}'

oppure

awk 'BEGIN{ORS="\n\n\n"};1'

Numerare le righe
ripartire per ogni file
awk '{print FNR "\t" $0}' files*

numerazione consetutiva, uno dei seguenti
awk '{print NR "\t" $0}' files*
awk '{printf("%5d : %s\n", NR,$0)}' files*
awk 'NF{$0=++a " :" $0};1' files*
awk '{print (NF? ++a " :" :"") $0}' files*

files* è la lista de file da trattare.

Numero di campi di ogni riga
awk '{print $0 " : " NF}' files*

Conta la somma del numero dei campi
awk '{s=s+NF; print $0 " : " s}; END{print s}' files*

come sopra ma scrive solo il totale
awk '{s=s+NF}; END{print s}' files*

come i precedenti ma ridefinendo FS (field separator); in questo modo il secondo è una versione di wc -w
awk 'BEGIN {FS=":"}; {s=s+NF; print $0 " : " s}; END{print s}' files*
awk 'BEGIN {FS=":"}; {s=s+NF}; END{print s}' files*

a2

Per i campi numerici mette il valore assoluto; invariate le stringhe
awk '{for (i=1; i<=NF; i++) if ($i < 0) $i = -$i; print }' files*

a3

Scrive la riga con il primo campo più lungo
awk '$1 > max {max=$1; maxline=$0}; END{ print max, maxline}' files*

Scrive la riga più lunga

awk 'BEGIN {maxlength = 0; longest = 0} \
    {                                   \
        if (length($0) > maxlength) {   \
            maxlength = length($0);     \
            longest = $0                \
        }                               \
    }                                   \
    END {print maxlength, longest}' files*

Siccome il testo è lungo si è usato il carattere \ per annullare l’a-capo.

Scrive l’ultimo campo di ogni riga
awk '{print $NF}' *files

Scrive l’ultimo campo dell’ultima riga
awk 'END{print $NF}' *files

Scrive le righe con più di 4 campi
awk 'NF > 4' *files

scrive le linee in cui il secondo campo è maggiore di 3
awk '$2 > 3' *files

Crea una stringa di 8 “o”
awk 'BEGIN{while (a++<8) s=s "o"; print s}'

Creare una sequenza è possibile ma non semplice; vedi il manuale di GNUawk e StackOverflow (range); conviene usare altri tools.

Pausa ma continua 😀

:mrgreen:

Annunci
Post a comment or leave a trackback: Trackback URL.

Trackbacks

Rispondi

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

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. 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 )

Google+ photo

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

Connessione a %s...

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