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
, print
secara otomatis memasukkan ORS
setelah pencetakan. ORS
singkatan 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 ORS
atau 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 print
menempel ORS
setelah catatan, printf
tidak. 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
printf
penafsiran%s
jadi gunakanprintf "%s" whatever
bukanprintf whatever
.