GUIDA AD AWK, 09 – elaborare campi

Inserire, rimuovere, aggiornare campi in un file csv

$ cat test
 uno,10,roma
 due,20,milano
 tre,30,venezia
 quattro,40,napoli
 cinque,50,verona
 sei,60,vicenza
 sette,70,latina
 otto,80,frascati
 nove,90,albano
# sostituisce la colonna $1 con un intero progressivo (++i)
 $ awk -F, '{$1=++i}1' OFS=, test
 1,10,roma
 2,20,milano
 3,30,venezia
 4,40,napoli
 5,50,verona
 6,60,vicenza
 7,70,latina
 8,80,frascati
 9,90,albano
# Aggiunge una colonna con un intero progressivo alla prima colonna
 $ awk -F, '{$1=++i FS $1}1' OFS=, test
 1,uno,10,roma
 2,due,20,milano
 3,tre,30,venezia
 4,quattro,40,napoli
 5,cinque,50,verona
 6,sei,60,vicenza
 7,sette,70,latina
 8,otto,80,frascati
 9,nove,90,albano
# Stesso risultato:
 $ awk -F, '{x=++i;} {print x, $1, $2, $3}' OFS="," test
 1,uno,10,roma
 2,due,20,milano
 3,tre,30,venezia
 4,quattro,40,napoli
 5,cinque,50,verona
 6,sei,60,vicenza
 7,sette,70,latina
 8,otto,80,frascati
 9,nove,90,albano
# O ancora:
 $ awk -F, '{x=++i;} {print x, $0}' OFS="," test
 1,uno,10,roma
 2,due,20,milano
 3,tre,30,venezia
 4,quattro,40,napoli
 5,cinque,50,verona
 6,sei,60,vicenza
 7,sette,70,latina
 8,otto,80,frascati
 9,nove,90,albano
# La variabile di awk "NF" indica il numero di colonne. Quindi "$(NF+1)" indicherà la colonna da aggiungere come ultima colonna, Dandole il valore "++1" otterremo l'aggiunta di una colonna alla fine contenente un intero progressivo:
 $ awk -F, '{$(NF+1)=++i;}1' OFS=, test
 uno,10,roma,1
 due,20,milano,2
 tre,30,venezia,3
 quattro,40,napoli,4
 cinque,50,verona,5
 sei,60,vicenza,6
 sette,70,latina,7
 otto,80,frascati,8
 nove,90,albano,9
# Inseriamo una colonna prima della penultima colonna
 $ awk -F, '{$(NF-1)=++i FS $(NF-1);}1' OFS=, test
 uno,1,10,roma
 due,2,20,milano
 tre,3,30,venezia
 quattro,4,40,napoli
 cinque,5,50,verona
 sei,6,60,vicenza
 sette,7,70,latina
 otto,8,80,frascati
 nove,9,90,albano
# Facciamo un update della seconda colonna aggiungendo il valore 10
 $ awk -F, '{$2+=10;}1' OFS=, test
 uno,20,roma
 due,30,milano
 tre,40,venezia
 quattro,50,napoli
 cinque,60,verona
 sei,70,vicenza
 sette,80,latina
 otto,90,frascati
 nove,100,albano
# Convertire la prima colonna in maiuscolo:
 $ awk -F, '{$1=toupper($1)}1' OFS=, test
 UNO,10,roma
 DUE,20,milano
 TRE,30,venezia
 QUATTRO,40,napoli
 CINQUE,50,verona
 SEI,60,vicenza
 SETTE,70,latina
 OTTO,80,frascati
 NOVE,90,albano

toupper -> funzione di awk che converte da minuscolo a maiuscolo
tolower -> converte da maiuscolo a minuscolo

# Estraiamo solo i primi 3 caratteri della prima colonna:
 $ awk -F, '{$1=substr($1,1,3)}1' OFS=, test
 uno,10,roma
 due,20,milano
 tre,30,venezia
 qua,40,napoli
 cin,50,verona
 sei,60,vicenza
 set,70,latina
 ott,80,frascati
 nov,90,albano

substr -> funzione di awk che ha 3 argomenti: stringa intera, posizione di partenza, numero di caratteri da estrarre

# "Svuotare" una colonna:
 $ awk -F, '{$2=""}1' OFS=, test
 uno,,roma
 due,,milano
 tre,,venezia
 quattro,,napoli
 cinque,,verona
 sei,,vicenza
 sette,,latina
 otto,,frascati
 nove,,albano
# Rimuovere una colonna:
 $ awk -F, '{x=2; for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' test
 uno,roma
 due,milano
 tre,venezia
 quattro,napoli
 cinque,verona
 sei,vicenza
 sette,latina
 otto,frascati
 nove,albano
 
# Unire la seconda colonna con la terza e rimuovi la terza colonna:
 $ awk -F, '{$2=$2$x;for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=3 test
 uno,10roma
 due,20milano
 tre,30venezia
 quattro,40napoli
 cinque,50verona
 sei,60vicenza
 sette,70latina
 otto,80frascati
 nove,90albano

————————————

INDICE

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>