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, printinsere automaticamente um ORSapós a impressão. ORSsignifica "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 ORSou 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 printanexa ORSapós o registro, printfnã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
printfinterpreta%sassim usam emprintf "%s" whatevervez deprintf whatever.