Crea sito

Trasposizione di una colonna in riga 2: la vendetta

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).

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

[[email protected]]$ 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.

[[email protected]]$ 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

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

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

One comment

  1. Ho trovato un interessante articolo sulla trasposizione di righe e colonne. Ecco il link: http://www.thelinuxrain.com/articles/transposing-rows-and-columns-3-methods

Leave a Reply

Il tuo indirizzo email non sarà pubblicato.

*