Ich denke, viele Leute gehen in diese Frage ein und suchen nach einer Möglichkeit, die neue Zeile zu vermeiden awk
. Daher werde ich genau dafür eine Lösung anbieten, da die Antwort auf den spezifischen Kontext bereits gelöst wurde!
In awk
, print
fügt automatisch eine ORS
nach dem Drucken. ORS
steht für "Ausgabedatensatztrennzeichen" und verwendet standardmäßig die neue Zeile. Wenn Sie also sagen, dass print "hi"
awk "hi" + neue Zeile druckt.
Dies kann auf zwei verschiedene Arten geändert werden: mit einem leeren ORS
oder mit printf
.
Mit einem leeren ORS
awk -v ORS= '1' <<< "hello
man"
Dies gibt insgesamt "helloman" zurück.
Das Problem hierbei ist, dass nicht alle awks das Setzen eines Leerzeichens akzeptieren ORS
, sodass Sie wahrscheinlich ein anderes Datensatztrennzeichen setzen müssen.
awk -v ORS="-" '{print ...}' file
Beispielsweise:
awk -v ORS="-" '1' <<< "hello
man"
Gibt "Hallo-Mann-" zurück.
Verwenden printf
(vorzuziehen)
Während print
Attaches ORS
nach der Aufzeichnung printf
nicht. Also printf "hello"
druckt nur "Hallo", sonst nichts.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Beachten Sie schließlich, dass im Allgemeinen eine letzte neue Zeile fehlt, sodass sich die Shell-Eingabeaufforderung in derselben Zeile wie die letzte Zeile der Ausgabe befindet. Verwenden Sie zum Reinigen END {print ""}
eine neue Zeile, die nach der gesamten Verarbeitung gedruckt wird.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printf
Interpretationen%s
so verwendenprintf "%s" whatever
stattprintf whatever
.