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 um ORS
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 usando printf
.
Usando um vazio ORS
awk -v ORS= '1' <<< "hello
man"
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.
awk -v ORS="-" '{print ...}' file
Por exemplo:
awk -v ORS="-" '1' <<< "hello
man"
Retorna "olá-homem-".
Usando printf
(preferível)
Enquanto print
anexa ORS
após o registro, printf
não. Assim, printf "hello"
apenas imprime "olá", nada mais.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
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.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printf
interpreta%s
assim usam emprintf "%s" whatever
vez deprintf whatever
.