[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RiminiLUG-General] formattazione di un foglio eletronico (o di un csv)



On 11/11/2011 14:38, BELLEROFONTE wrote:
[cut]
Ho creato uno script:

#! /bin/sh
awk -F , '{print $3}' /dati/Scrivania/csvs/prova > /dati/Scrivania/cacca
sed s/\"Name\"// /dati/Scrivania/cacca > /dati/Scrivania/cacca2
sed s/\"NumberGeneral\"// /dati/Scrivania/cacca2 > /dati/Scrivania/cacca3
sed /^$/d /dati/Scrivania/cacca3 > /dati/Scrivania/cacca4

che da come file finale (cacca4) questo:

"file"
"<http://www.gammu.org>"
"Nokia 6230i 03.40"
"Wammu 0.35"
"20111012T212841Z"
"1.05"
1
"pluto"
3331111111
2
"pippo"
3332222222
3
"paperino"
3333333333

Sicuramente so che qualcuno saprà consigliarmi di meglio :-D ( se non
altro nella forma dello script).
Avrei anche una domanda un pò più difficile:
Vorrei trasporre le righe tre a tre in colonne per ottenere un risultato
simile a quello indicato nel mio primo messaggio, ossia:

1 "pluto" 3331111111
2 "pippo" 3332222222
3 "paperino" 3333333333


Ciao Andrea!
tieni presente che awk è molto più potente di come lo hai usato ;)

ci sono tanti modi per fare quello che chiedi; io ho trovato questo:

1. creo un file awk come questo (per sempio bf.awk) e lo rendo eseguibile:
----------------------------------------------------------
#! /usr/bin/awk -f

BEGIN {
FS=","
print "Elenco telefonico"
print "================="
}

{
if ($1 ~ /^Location/ ) printf "%s " , $3
if ($1 ~ /^Entry00Text/ ) printf "%s " , $3
if ($1 ~ /^Entry01Text/ ) printf "%s\n", $3
}

END { print "-------------" }
----------------------------------------------------------

2. gli do in pasto il file csv in questo modo:
sed 's/"//g' nome_file_csv.txt | ./bf.awk

Se poi vuoi salvare il risultato ridirigi semplicemente l'output su file
All'interno del file awk ti puoi tranquillamente sbizzarrire con le formattazioni (io ho fatto solo un esempio...)

Se hai dubbi su quanto trovi scritto qui chiedi pure... il trucco per raggruppare più linee su una sola è usare printf invece di print ;)


Ivan