Saya ingin jumlah variabel / NR akan dicetak berdampingan di setiap iterasi. Bagaimana kita menghindari awk dari mencetak baris baru di setiap iterasi? Dalam kode saya, baris baru dicetak secara default di setiap iterasi
for file in cg_c ep_c is_c tau xhpl
printf "\n $file" >> to-plot.xls
for f in 2.54 1.60 800
awk '{sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
done
done
Saya ingin output muncul seperti ini
cg_c ans1 ans2 ans3
ep_c ans1 ans2 ans3
is_c ans1 ans2 ans3
tau ans1 ans2 ans3
xhpl ans1 ans2 ans3
put out saya saat ini adalah seperti ini
**cg_c**
ans1
ans2
ans3
**ep_c**
ans1
ans2
ans3
**is_c**
ans1
ans2
ans3
**tau**
ans1
ans2
ans3
**xhpl**
ans1
ans2
ans3
printf
penafsiran%s
jadi gunakanprintf "%s" whatever
bukanprintf whatever
.printf "%s",whatever
Anda lupa koma. Anda juga dapat memperluas dengan lebih banyak variabel dan memisahkannya dengan koma.Variabel ORS (output record separator) dalam AWK default ke "\ n" dan dicetak setelah setiap baris. Anda dapat mengubahnya menjadi "" di
BEGIN
bagian ini jika Anda ingin semuanya dicetak secara berurutan.sumber
""
(tanpa spasi) untuk tidak memiliki pemisahan sama sekali.awk 'BEGIN {ORS="\t"} {sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
ORS="\r"
jika Anda ingin misalnya mencetak penghitung yang menunjukkan progres.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 memasukkanORS
setelah pencetakan.ORS
singkatan dari "output record separator" dan default ke baris baru. Jadi, setiap kali Anda mengatakanprint "hi"
awk mencetak "hai" + baris baru.Ini dapat diubah dengan dua cara berbeda: menggunakan yang kosong
ORS
atau menggunakanprintf
.Menggunakan yang kosong
ORS
Ini mengembalikan "helloman", semuanya.
Masalahnya di sini adalah tidak semua awks menerima pengaturan kosong
ORS
, jadi Anda mungkin harus mengatur pemisah rekaman lain.Sebagai contoh:
Mengembalikan "hello-man-".
Menggunakan
printf
(lebih disukai)Saat
print
menempelORS
setelah catatan,printf
tidak. Jadi,printf "hello"
cetak saja "halo", tidak ada yang lain.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.sumber
satu arah
sumber
printf $0
, karena$0
mungkin mengandung string seperti%F
, dll ... Setelah dengan mudah gagal (setidaknya dengan melongo 3.1.5):echo "%F"|awk '{printf $0}'
. Gunakanprintf "%s",$0
saja.Anda cukup menggunakan ORS secara dinamis seperti ini:
awk '{ORS="" ; print($1" "$2" "$3" "$4" "$5" "); ORS="\n"; print($6-=2*$6)}' file_in > file_out
sumber
Jika Perl adalah opsi, berikut adalah solusi menggunakan contoh fedorqui:
seq 5 | perl -ne 'chomp; print "$_ "; END{print "\n"}'
Penjelasan:
chomp
menghapus baris baruprint "$_ "
mencetak setiap baris, menambahkan ruangyang
END{}
blok digunakan untuk mencetak baris barukeluaran:
1 2 3 4 5
sumber