[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[riminilug-general] Risposta tardiva a: "Mi serve uno script"
Ciao a tutti !!
Visto che sono stato "tirato" in ballo..
Da informazioni datemi da Andy Urbi sul tipo di file da
passare allo script , ne ho creato uno che avesse le seguenti
caratteristiche:
1) File di testo puro (non formattato tipo Open/Libre Office)
2) Il record iniziava con un nominativo racchiuso tra virgolette e,
di seguito senza spazi, l'indirizzo e-mail racchiuso tra i
caratteri minore e maggiore (< > ); di seguito, senza spazi,
vi era il carattere virgola (,) e uno spazio e poi si ricominciava col
record successivo.
3) Il file aveva la stessa "cadenza" ripetuta per ogni record.
Esempio: file.csv
"Tizio Tizi"<tiziotizi@xxxxxx>, "Caio Cai"<caiocai@xxxxxx>, "Sempronio
Semproni"<semproniosemproni@xxxxxx>,
"Mario Rossi"<mariorossi@xxxxxx>, "Guido Guidi"<guidoguidi@xxxxxx>,
"Cecco Cecchi"<ceccocecchi@xxxxxx>,
Volevo ottenere questo risultato:
Caio Cai caiocai@xxxxxx
Cecco Cecchi ceccocecchi@xxxxxx
Guido Guidi guidoguidi@xxxxxx
Mario Rossi mariorossi@xxxxxx
Sempronio Semproni semproniosemproni@xxxxxx
Tizio Tizi tiziotizi@xxxxxx
Ho aperto un terminale ( Scorciatoia da tastiera CTRL + ALT + T )
e , avendo il file.csv, ho digitato:
cat file.csv |awk 'BEGIN {RS=", "}{print $0}'|sed -e '/^$/d' > nuovo.csv
in awk
-ho impostato la variabile RS (Record Separator) con virgola spazio (, )
-print $0 stampa l'intero record
in sed
- ho eliminato le righe vuote e ho salvato il tutto in un nuovo file
(nuovo.csv)
Eccolo:
"Tizio Tizi"<tiziotizi@xxxxxx>
"Caio Cai"<caiocai@xxxxxx>
"Sempronio Semproni"<semproniosemproni@xxxxxx>
"Mario Rossi"<mariorossi@xxxxxx>
"Guido Guidi"<guidoguidi@xxxxxx>
"Cecco Cecchi"<ceccocecchi@xxxxxx>
Poi sempre nel terminale ho digitato:
cat nuovo.csv |sed 's|"<|,|g;s|"||g;s|>||g' >nuovo2.csv
in sed
- ho sostituito la sequenza "< con il carattere virgola (,)
- di seguito ho eliminato le virgolette (") e il carattere >
- è stato creato il file nuovo2.csv (qui di seguito riportato)
Tizio Tizi,tiziotizi@xxxxxx
Caio Cai,caiocai@xxxxxx
Sempronio Semproni,semproniosemproni@xxxxxx
Mario Rossi,mariorossi@xxxxxx
Guido Guidi,guidoguidi@xxxxxx
Cecco Cecchi,ceccocecchi@xxxxxx
Infine ho digitato :
cat nuovo2.csv |column -t -s , |sort > file_finale.csv
in column
- la -t indica che viene applicato un formato tabella al file
- la -s indica che il carattere , (virgola) viene utilizzato come
separatore dei campi del record e li presenta incolonnati.
sort ordina alfabeticamente (a -> z)
viene creato il file_finale.csv
Output:
Caio Cai caiocai@xxxxxx
Cecco Cecchi ceccocecchi@xxxxxx
Guido Guidi guidoguidi@xxxxxx
Mario Rossi mariorossi@xxxxxx
Sempronio Semproni semproniosemproni@xxxxxx
Tizio Tizi tiziotizi@xxxxxx
N.B. Non sono un informatico e ho impiegato diverso tempo per venirne a
capo :)
Sicuramente vi sono metodi più eleganti e raffinati per ottenere la
stessa cosa.
Anzi chi avesse soluzioni alternative, si faccia avanti !
Vi saluto !
Andrea G.
---------------------------------------------------------------------
Per cancellarsi, scrivi a: riminilug-general-unsubscribe@xxxxxxxxxxxx
Se vuoi conoscere altri comandi, scrivi a: riminilug-general-help@xxxxxxxxxxxx