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, printfügt automatisch eine ORSnach dem Drucken. ORSsteht 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 ORSoder 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 printAttaches ORSnach der Aufzeichnung printfnicht. 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
printfInterpretationen%sso verwendenprintf "%s" whateverstattprintf whatever.