erlug
[Top] [All Lists]

Re: [Erlug] Trasformare un file con sed

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] Trasformare un file con sed
From: Davide Brini <db72@xxxxxxxxxxxx>
Date: Wed, 8 Feb 2012 09:58:55 +0100
On Wed, 08 Feb 2012 08:05:17 +0100, "vic@xxxxxxxxxxxxxx"
<vic@xxxxxxxxxxxxxx> wrote:

> ciao a tutti,
> ho un file di testo contenente un rubrica che viene da un programmillo 
> windows che uso in studio. Volendo importare la rubrica in egroupware 
> devo convertirlo in un file csv.

Visto che viene da windows, prima di fare altro assicurati che le linee
terminino con \n e non \r\n.

> Il problema e' che la struttura del file e' un po' assurda:
> 10 righe di intestazione a inizio file
> poi per ogni contatto ho:
> nome
> tel 1
> tel 2
> tel 3
> tel 4
> tel 5
> tel 6
> tel 7
> 27 trattini che fanno da separatore
> 
> come ho pensato di procedere:
> 1) aggiungo ";" a fine riga
> 2) cancello el prime dieci righe
> 3) elimino tutti i fine riga in modo da avere un'unica riga infinita
> 4) sostituisco i 27 trattini + il loro ";" con un fine riga
> 
> a questo punto dovrei avere il mio file con struttura
> nome;tel 1; tel 2; tel 3; eccettera eccettera
> 
> come l'ho implementato:
> sed -e 's/.*/&;/g' $INPUT | sed '1,10d' | sed 's/\n//g'| \
> sed 's/---------------------------;/\n/g' >import.csv
> 
> il problema e' che pare ignorare il passaggio 3 (sed 's/\n//g') e non 
> capisco dove sbaglio. Sicuramente e' colpa della mia enorme ignoranza :-)

In aggiunta alle altre valide risposte:

tail -n +11 "$INPUT" | grep -v -- '------' | paste -d ';' -s 

o con awk:

awk 'NR>10 && !/^-----/ {printf "%s%s", s, $0; s=";"}END{print""}' "$INPUT"

se vuoi il ";" alla fine invece puoi fare

awk -v ORS=";" 'NR>10 && !/^-----/; END{printf "\n"}' "$INPUT"

<Prev in Thread] Current Thread [Next in Thread>