Quiero que la variable suma / NR se imprima de lado a lado en cada iteración. ¿Cómo evitamos que awk imprima nueva línea en cada iteración? En mi código, se imprime una nueva línea 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
printf
interpreta%s
así que usa enprintf "%s" whatever
lugar deprintf whatever
.printf "%s",whatever
Olvidaste la coma. También puede ampliar con más variables y separarlas con una coma.La variable ORS (separador de registro de salida) en AWK tiene como valor predeterminado "\ n" y se imprime después de cada línea. Puede cambiarlo a "" en la
BEGIN
sección si desea que todo se imprima consecutivamente.fuente
""
(sin espacio) para que no tenga separación en absoluto.awk 'BEGIN {ORS="\t"} {sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
ORS="\r"
si desea, por ejemplo, imprimir un contador que muestre la progresión.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 unORS
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 digaprint "hi"
awk imprime "hola" + nueva línea.Esto se puede cambiar de dos maneras diferentes: usando un vacío
ORS
o usandoprintf
.Usando un vacío
ORS
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.Por ejemplo:
Devuelve "hello-man-".
Usando
printf
(preferible)Mientras se
print
adjuntaORS
después del registro,printf
no lo hace. Por lo tanto,printf "hello"
solo imprime "hola", nada más.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.fuente
de una sola mano
fuente
printf $0
, ya que$0
puede contener cadenas como%F
, etc ... Siguiendo fácilmente falla (al menos con gawk 3.1.5):echo "%F"|awk '{printf $0}'
. Use elprintf "%s",$0
en su lugar.Simplemente puede usar ORS dinámicamente de esta manera:
awk '{ORS="" ; print($1" "$2" "$3" "$4" "$5" "); ORS="\n"; print($6-=2*$6)}' file_in > file_out
fuente
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íneaprint "$_ "
imprime cada línea, agregando un espacio queel
END{}
bloque se usa para imprimir una nueva líneasalida:
1 2 3 4 5
fuente