separador print examples comparar columnas campos archivos awk gawk

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''