Saya kira banyak orang yang masuk dalam pertanyaan ini mencari cara untuk menghindari baris baru di awk. Jadi, saya akan menawarkan solusi untuk itu, karena jawaban untuk konteks spesifik sudah dipecahkan!
Dalam awk, printsecara otomatis memasukkan ORSsetelah pencetakan. ORSsingkatan dari "output record separator" dan default ke baris baru. Jadi, setiap kali Anda mengatakan print "hi"awk mencetak "hai" + baris baru.
Ini dapat diubah dengan dua cara berbeda: menggunakan yang kosong ORSatau menggunakan printf.
Menggunakan yang kosong ORS
awk -v ORS= '1' <<< "hello
man"
Ini mengembalikan "helloman", semuanya.
Masalahnya di sini adalah tidak semua awks menerima pengaturan kosong ORS, jadi Anda mungkin harus mengatur pemisah rekaman lain.
awk -v ORS="-" '{print ...}' file
Sebagai contoh:
awk -v ORS="-" '1' <<< "hello
man"
Mengembalikan "hello-man-".
Menggunakan printf(lebih disukai)
Saat printmenempel ORSsetelah catatan, printftidak. Jadi, printf "hello"cetak saja "halo", tidak ada yang lain.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Akhirnya, perhatikan bahwa secara umum ini melewatkan baris baru akhir, sehingga prompt shell akan berada di baris yang sama dengan baris terakhir dari output. Untuk membersihkan ini, gunakan END {print ""}sehingga baris baru akan dicetak setelah semua pemrosesan.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printfpenafsiran%sjadi gunakanprintf "%s" whateverbukanprintf whatever.