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

printfinterpreta%sasí que usa enprintf "%s" whateverlugar deprintf whatever.printf "%s",whateverOlvidaste 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
BEGINsecció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.xlsORS="\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,printinserta automáticamente unORSdespués de la impresión.ORSsignifica "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
ORSo usandoprintf.Usando un vacío
ORSEsto 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
printadjuntaORSdespués del registro,printfno 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$0puede contener cadenas como%F, etc ... Siguiendo fácilmente falla (al menos con gawk 3.1.5):echo "%F"|awk '{printf $0}'. Use elprintf "%s",$0en 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_outfuente
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:
chompelimina 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 5fuente