separador print numero linea imprimir examples comando campos scripting awk newline

scripting - print - awk unix



awk sin imprimir nueva lĂ­nea (5)

La variable ORS (separador de registros de salida) en AWK se establece de forma predeterminada en "/ n" y se imprime después de cada línea. Puede cambiarlo a "" en la sección BEGIN si desea que todo se imprima de forma consecutiva.

Quiero que la suma / NR variable se imprima lado a lado en cada iteración. ¿Cómo evitamos que awk imprima newline en cada iteración? En mi código, una nueva línea se imprime por defecto en cada iteración

for file in cg_c ep_c is_c tau xhpl printf "/n $file" >> to-plot.xls for f in 2.54 1.60 800 awk ''{sum+=$3}; END {print sum/NR}'' ${file}_${f}_v1.xls >> to-plot-p.xls done done

Quiero que la salida aparezca así

cg_c ans1 ans2 ans3 ep_c ans1 ans2 ans3 is_c ans1 ans2 ans3 tau ans1 ans2 ans3 xhpl ans1 ans2 ans3

mi salida actual es así

**cg_c** ans1 ans2 ans3 **ep_c** ans1 ans2 ans3 **is_c** ans1 ans2 ans3 **tau** ans1 ans2 ans3 **xhpl** ans1 ans2 ans3


Si Perl es una opción, aquí hay una solución usando el ejemplo de Fedorqui:

seq 5 | perl -ne ''chomp; print "$_ "; END{print "/n"}''

Explicación:
chomp elimina la nueva línea
print "$_ " imprime cada línea, añadiendo un espacio
el bloque END{} se usa para imprimir una línea nueva

salida: 1 2 3 4 5


de una sola mano

awk ''/^/*/*/{gsub("*","");printf "/n"$0" ";next}{printf $0" "}'' to-plot.xls


awk ''{sum+=$3}; END {printf "%f",sum/NR}'' ${file}_${f}_v1.xls >> to-plot-p.xls

print insertará una nueva línea por defecto. No quieres que eso suceda, por lo tanto, usa printf lugar.


Supongo que muchas personas están entrando en esta pregunta buscando una forma de evitar la nueva línea en awk . Por lo tanto, voy a ofrecer una solución a eso, ¡ya que la respuesta al contexto específico ya se resolvió!

En awk , la print inserta automáticamente un ORS después de la impresión. ORS significa "separador de registro de salida" y se predetermina a la nueva línea. Entonces, cuando diga print "hi" imprime "hola" + nueva línea.

Esto se puede cambiar de dos maneras diferentes: usando un ORS vacío o usando printf .

Usando un ORS vacío

awk -v ORS= ''1'' <<< "hello man"

Esto devuelve "helloman", todos juntos.

El problema aquí es que no todos los awks aceptan configurar un ORS vacío, 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 que la print agrega ORS después del registro, printf no lo hace. Por lo tanto, printf "hello" simplemente imprime "hola", nada más.

$ awk ''BEGIN{print "hello"; print "bye"}'' hello bye $ awk ''BEGIN{printf "hello"; printf "bye"}'' hellobye

Por último, tenga en cuenta que, en general, se omite una nueva línea final, de modo que el indicador de shell estará en la misma línea que la última línea de la salida. Para limpiar esto, use 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