print - Imprimir todos los campos con AWK separados por OFS
awk unix (2)
¿Hay alguna manera de imprimir todos los registros separados por la OFS sin escribir cada número de columna?
#Desired style of syntax, undesired result
[kbrandt@glade: ~] echo "1 2 3 4" | gawk ''BEGIN { OFS=" :-( "}; {print $0}''
1 2 3 4
#Desired result, undesired syntax
[kbrandt@glade: ~] echo "1 2 3 4" | gawk ''BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}''
1 :-) 2 :-) 3 :-) 4
Esta es una variación del primer estilo:
echo "1 2 3 4" | gawk ''BEGIN { OFS=" :-( "}; {$1=$1; print $0}''
Resultados:
1 :-( 2 :-( 3 :-( 4
Explicación:
$1=$1
es para reconstruir el registro, utilizando el OFS actual (también puede ver http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields )
Actualizar:
(sugerido por @EdMorton y @steve) Esta es una versión más breve y equivalente del comando awk, que establece OFS en la línea de comando y aprovecha la print $0
como la acción predeterminada:
awk -v OFS=" :-( " ''{$1=$1}1''
Su equivalente es:
$ echo "1 2 3 4" | sed ''s/ /:-)/g''
Aquí hay otra opción con awk:
$ echo "1 2 3 4" | awk ''{ gsub(//s/, ":-)")}1''