Mi sono ritrovato nel caso in cui la procedura descritta nell’articolo Trasposizione di una colonna in riga non ha funzionato; in particolare il secondo xargs va in errore per un problema di riempimento di buffer (si potrebbe usare l’opzione [-s max-chars] di xargs ma potrebbe non essere sufficiente).

[alex@goku]$ cat elenco | xargs -I {} echo -n ",\'{}\'" | xargs
xargs: argument line too long
xargs: echo: terminated by signal 13

[alex@goku]$ wc -l elenco
9144 elenco

Ho modificato la procedura e ora dovrebbe funzionare anche con un numero elevatissimo di righe (aspetto i vostri commenti). In particolare ho utilizzato il comando sed per inserire all’inizio e alla fine di ogni riga un singolo apice e poi ho semplicemente stampato ogni riga usando l’opzione -n di echo che non stampa il ritorno a capo; quindi la colonna viene trasformata in un’unica riga. Ho riportato il time delle diverse metologie e si vede che il risultato ottenuto con il sed è il migliore.

[alex@goku]$ time for i in $(cat elenco | sed 's/^/'\\\''/' | sed 's/$/'\\\','/'); do echo -n $i; done | sed 's/,$//'
real    m0.858s
user    0m0.470s
sys     0m0.060s

[alex@goku]$ time cat elenco | xargs -I{} echo -n ",#{}#" | tr "#" "'" | cut -c 2-
real    0m24.296s
user    0m2.960s
sys     0m18.007s

[alex@goku]$ time cat elenco | xargs -I {} echo ",\'{}\'" | xargs | cut -c 2- | tr -d ' '
real    0m25.561s
user    0m3.200s
sys     0m22.107s

[ad name=”HTML”]

1 Commento on Trasposizione di una colonna in riga 2: la vendetta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.