Myślę, że wiele osób wchodzi w to pytanie, szukając sposobu na uniknięcie nowej linii awk
. Dlatego mam zamiar zaproponować rozwiązanie tego problemu, ponieważ odpowiedź na konkretny kontekst została już rozwiązana!
W awk
, print
automatycznie wstawia a ORS
po wydrukowaniu. ORS
oznacza „output record separator” i domyślnie przyjmuje nową linię. Więc ilekroć powiesz, print "hi"
awk wypisze „cześć” + nowa linia.
Można to zmienić na dwa różne sposoby: używając pustego ORS
lub używając printf
.
Korzystanie z pustego pliku ORS
awk -v ORS= '1' <<< "hello
man"
To zwraca „helloman”, wszystko razem.
Problem polega na tym, że nie wszystkie awks akceptują ustawienie pustego ORS
, więc prawdopodobnie będziesz musiał ustawić inny separator rekordów.
awk -v ORS="-" '{print ...}' file
Na przykład:
awk -v ORS="-" '1' <<< "hello
man"
Zwraca „hello-man-”.
Używanie printf
(preferowane)
Chociaż print
załącza się ORS
po płycie, printf
nie. Dlatego printf "hello"
po prostu drukuje „cześć”, nic więcej.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Na koniec zwróć uwagę, że generalnie pomija to ostatnią nową linię, więc znak zachęty powłoki będzie w tej samej linii, co ostatnia linia wyniku. Aby to wyczyścić, użyj, END {print ""}
aby nowa linia została wydrukowana po całym przetwarzaniu.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printf
interpretuje,%s
więc używajprintf "%s" whatever
zamiastprintf whatever
.