Sanırım birçok insan bu soruya girerek yeni çizgiden kaçınmanın bir yolunu arıyor awk. Böylece, belirli bir bağlamın cevabı zaten çözülmüş olduğundan, bunun için bir çözüm sunacağım!
Içinde awk, printotomatik olarak bir ORSbaskı sonrası ekler . ORS"çıkış kayıt ayırıcısı" anlamına gelir ve varsayılan olarak yeni satırı kullanır. Yani her ne zaman print "hi"awk "hi" + yeni satır yazdırır.
Bu iki farklı şekilde değiştirilebilir: boş bir ORSkullanma veya kullanma printf.
Boş kullanma ORS
awk -v ORS= '1' <<< "hello
man"
Bu hep birlikte "merhaba" döndürür.
Buradaki sorun, tüm awks'lerin boş ayar yapmayı kabul etmemesidir ORS, bu nedenle muhtemelen başka bir kayıt ayırıcı ayarlamanız gerekir.
awk -v ORS="-" '{print ...}' file
Örneğin:
awk -v ORS="-" '1' <<< "hello
man"
"Merhaba-man-" döndürür.
Kullanma printf(tercih edilir)
İken printAtaşe ORSkayıt sonra, printfyapmaz. Böylece, printf "hello"sadece "merhaba" yazdırır, başka bir şey.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Son olarak, kabuk isteminin çıktının son satırıyla aynı satırda olmasını sağlamak için genel olarak son bir yeni satırı kaçırdığını unutmayın. Bunu temizlemek için, END {print ""}tüm işlemlerden sonra yeni bir satır yazdırılacak şekilde kullanın .
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printfyorumlayan akıl yerine%skullanmak .printf "%s" whateverprintf whatever