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
, print
inserisce automaticamente un ORS
dopo la stampa. ORS
sta 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 ORS
o 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 print
allega ORS
dopo il record, printf
non 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
printf
interpreta%s
così usaprintf "%s" whatever
invece diprintf whatever
.