Supongo que muchas personas están entrando en esta pregunta buscando una manera de evitar la nueva línea awk
. Por lo tanto, voy a ofrecer una solución para eso, ¡ya que la respuesta al contexto específico ya estaba resuelta!
En awk
, print
inserta automáticamente un ORS
después de la impresión. ORS
significa "separador de registro de salida" y por defecto es la nueva línea. Así que cada vez que diga print "hi"
awk imprime "hola" + nueva línea.
Esto se puede cambiar de dos maneras diferentes: usando un vacío ORS
o usando printf
.
Usando un vacío ORS
awk -v ORS= '1' <<< "hello
man"
Esto devuelve "helloman", todos juntos.
El problema aquí es que no todos los awks aceptan configurar un vacío ORS
, por lo que probablemente tenga que configurar otro separador de registros.
awk -v ORS="-" '{print ...}' file
Por ejemplo:
awk -v ORS="-" '1' <<< "hello
man"
Devuelve "hello-man-".
Usando printf
(preferible)
Mientras se print
adjunta ORS
después del registro, printf
no lo hace. Por lo tanto, printf "hello"
solo imprime "hola", nada más.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Finalmente, tenga en cuenta que, en general, esto pierde una nueva línea final, por lo que el indicador de shell estará en la misma línea que la última línea de la salida. Para limpiar esto, utilícelo END {print ""}
para que se imprima una nueva línea después de todo el procesamiento.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printf
interpreta%s
así que usa enprintf "%s" whatever
lugar deprintf whatever
.