Se avete la necessità di trasformare un elenco di valori da un’unica colonna a un’unica riga è sufficiente usare il comando xargs che legge dallo standard input o pipe e restituisce in output (di default esegue il comando echo) la stessa stringa eliminando il ritorno a capo.

alex@goku:~$ cat elenco
Q01569
Q04191
Q06157
alex@goku:~$ cat elenco | xargs
Q01569 Q04191 Q06157

Personalmente trovo molto utile questo suggerimento quando devo eseguire una query passando una lista molto lunga di condizioni; il tipico esempio è:

select * from tabella where valore in ('var1','var2','var');

Quindi il comando da eseguire in shell bash per avere la lista separata da virgole e ogni valore fra singoli apici è il seguente:

alex@goku:~$ cat elenco | xargs -I {} echo -n ",\'{}\'" | xargs | cut -c 2-
'Q01569','Q04191','Q06157'

La query completa risulterà di questo tipo:

alex@goku:~$ echo "select * from tabella where valore in ($(cat elenco | xargs -I {} echo -n ",\'{}\'" | xargs | cut -c 2-));"
select * from tabella where valore in ('Q01569','Q04191','Q06157');

Aggiornamento:

Posso togliere i caratteri di ESCAPE sui singoli apici all’interno di echo e rimuovere l’ultimo xargs (in questo modo evito anche l’errore “xargs: argument line too long“)

alex@goku:~$ cat elenco | xargs -I {} echo -n ",'{}'" | cut -c 2-
'Q01569','Q04191','Q06157'

[ad name=”HTML”]

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.