Quero que a variável sum / NR seja impressa lado a lado em cada iteração. Como evitar que o awk imprima uma nova linha em cada iteração? No meu código, uma nova linha é impressa por padrão em cada iteração
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
Eu quero que a saída apareça assim
cg_c ans1 ans2 ans3
ep_c ans1 ans2 ans3
is_c ans1 ans2 ans3
tau ans1 ans2 ans3
xhpl ans1 ans2 ans3
minha saída atual é assim
**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
assim usam emprintf "%s" whatever
vez deprintf whatever
.printf "%s",whatever
Você esqueceu a vírgula. Você também pode estender com mais variáveis e separá-las com uma vírgula.A variável ORS (separador de registros de saída) no AWK é padronizada como "\ n" e é impressa após cada linha. Você pode alterá-lo para "" na
BEGIN
seção se desejar que tudo seja impresso consecutivamente.fonte
""
(sem espaço) para não ter nenhuma separação.awk 'BEGIN {ORS="\t"} {sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
ORS="\r"
se você quiser, por exemplo, imprimir um contador mostrando a progressão.Eu acho que muitas pessoas estão entrando nessa questão procurando uma maneira de evitar a nova linha
awk
. Assim, vou oferecer uma solução para isso, já que a resposta para o contexto específico já foi resolvida!Em
awk
,print
insere automaticamente umORS
após a impressão.ORS
significa "separador de registro de saída" e o padrão é a nova linha. Então, sempre que você dizprint "hi"
awk, imprime "oi" + nova linha.Isso pode ser alterado de duas maneiras diferentes: usando um vazio
ORS
ou usandoprintf
.Usando um vazio
ORS
Isso retorna "helloman", todos juntos.
O problema aqui é que nem todos os awks aceitam definir um vazio
ORS
, então você provavelmente precisará definir outro separador de registros.Por exemplo:
Retorna "olá-homem-".
Usando
printf
(preferível)Enquanto
print
anexaORS
após o registro,printf
não. Assim,printf "hello"
apenas imprime "olá", nada mais.Por fim, observe que, em geral, isso perde uma nova linha final, para que o prompt do shell fique na mesma linha que a última linha da saída. Para limpar isso, use
END {print ""}
para que uma nova linha seja impressa após todo o processamento.fonte
mão única
fonte
printf $0
, uma vez que$0
podem conter strings como%F
, etc ... A seguir facilmente falhar (pelo menos com GAWK 3.1.5):echo "%F"|awk '{printf $0}'
. Use oprintf "%s",$0
lugar.Você pode simplesmente usar o ORS dinamicamente assim:
awk '{ORS="" ; print($1" "$2" "$3" "$4" "$5" "); ORS="\n"; print($6-=2*$6)}' file_in > file_out
fonte
Se Perl é uma opção, aqui está uma solução usando o exemplo de fedorqui:
seq 5 | perl -ne 'chomp; print "$_ "; END{print "\n"}'
Explicação:
chomp
remove a nova linhaprint "$_ "
imprime cada linha, acrescentando um espaço em queo
END{}
bloco é usado para imprimir uma nova linharesultado:
1 2 3 4 5
fonte