Immagino che molte persone stiano entrando in questa domanda alla ricerca di un modo per evitare la nuova linea awk. Quindi, offrirò una soluzione proprio a questo, poiché la risposta al contesto specifico era già risolta!
In awk, printinserisce automaticamente un ORSdopo la stampa. ORSsta per "separatore record di output" e per impostazione predefinita è la nuova riga. Quindi ogni volta che dici print "hi"awk stampa "ciao" + nuova riga.
Questo può essere modificato in due modi diversi: usando un vuoto ORSo usando printf.
Usando un vuoto ORS
awk -v ORS= '1' <<< "hello
man"
Questo restituisce "Helloman", tutti insieme.
Il problema qui è che non tutti i awk accettano di impostare un valore vuoto ORS, quindi probabilmente devi impostare un altro separatore di record.
awk -v ORS="-" '{print ...}' file
Per esempio:
awk -v ORS="-" '1' <<< "hello
man"
Restituisce "ciao-uomo-".
Utilizzo printf(preferibile)
Mentre si printallega ORSdopo il record, printfnon lo fa. Quindi, printf "hello"stampa solo "ciao", nient'altro.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Infine, nota che in generale questo manca una nuova riga finale, quindi il prompt della shell sarà nella stessa riga dell'ultima riga dell'output. Per pulire questo, utilizzare in END {print ""}modo che una nuova riga verrà stampata dopo tutta l'elaborazione.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printfinterpreta%scosì usaprintf "%s" whateverinvece diprintf whatever.