Cómo imprimir el contenido de un archivo como una sola línea entre comillas y separadas por comas.

$cat test
file1.gz
file2.gz
file3.gz
file4.gz

Quiero imprimir como 'file1.gz','file2.gz','file3.gz','file4.gz'

1
D.Aquar 17 feb. 2020 a las 20:12

2 respuestas

La mejor respuesta
$ awk '{printf "%s\047%s\047", sep, $0; sep=","} END{print ""}' file
'file1.gz','file2.gz','file3.gz','file4.gz'

O funcionalidad equivalente pero almacenando todo el archivo de entrada en la memoria:

$ awk '{out=out sep "\047" $0 "\047"; sep=","} END{print out}' file
'file1.gz','file2.gz','file3.gz','file4.gz'

Y abreviada para las golfistas :-):

$ awk -v q="'" '{o=o s q $0 q; s=","} END{print o}' file
'file1.gz','file2.gz','file3.gz','file4.gz'

Personalmente, usaría el primer script anterior a menos que tenga alguna necesidad específica de construir todo el registro de salida antes de imprimirlo, p. modificarlo de alguna manera basado en una expresión regular de varias líneas.

3
Ed Morton 17 feb. 2020 a las 18:17

Convierta una columna en una fila con separador. Con sed y pasta:

sed "s/.*/'&'/" file | paste -sd ","

Salida:

'file1.gz','file2.gz','file3.gz','file4.gz'
3
Cyrus 17 feb. 2020 a las 18:56