Mendapatkan kesalahan AWK saat memindahkan beberapa konten pesan

1

Saya mencoba untuk memindahkan teks di bawah ini menjadi satu baris dengan pipa terpisah, saya mendapatkan beberapa kesalahan jika teks dimulai dengan angka%, apa masalahnya, ada perintah lain di sana

Sampel konten dalam file txt

PROMOTIONAL - ATL
36% Extra Money : NML 60=65(Rs.47.85 now, rest Rs.17.15 in 48hrs) + A&B @20p/m +  ACCC DD  for 11 day. 100=100 1 days.
2017-11-21
09:00 AM
10:00 PM
ENGLISH
OR
0.0
10

perintah awk menggunakan:

awk '{printf NR==1?$0:"|"$0}' text

Kesalahan:

PROMOTIONAL - ATLawk: (FILENAME=text FNR=2) fatal: not enough arguments to satisfy format string</br>
    `|36% Extra Money : NML 60=65(Rs.47.85 now, rest Rs.17.15 in 48hrs) + A&B @20p/m +  ACCC DD  for 11 day. 100=100 1 days.'
         ^ ran out for this one
Arun Binoy
sumber

Jawaban:

1

Masalahnya adalah bahwa argumen pertama yang printfharus berupa format string. Dalam format string, tanda persen diperlakukan secara khusus. Untuk menghindari masalah dengan input Anda yang mengandung %tanda, coba:

$ awk '{printf "%s",(NR==1?"":"|")$0}' text
PROMOTIONAL - ATL|36% Extra Money : NML 60=65(Rs.47.85 now, rest Rs.17.15 in 48hrs) + A&B @20p/m +  ACCC DD  for 11 day. 100=100 1 days.|2017-11-21|09:00 AM|10:00 PM|ENGLISH|OR|0.0|10

Di sini, argumen pertama untuk printf, menjadi format string, adalah %s. The %smenginstruksikan awk untuk mengambil argumen kedua dan format itu sebagai string. Argumen kedua dapat termasuk %atau tidak, itu tidak masalah.

Atau, secara setara, kita dapat menggunakan:

$ awk '{printf "%s%s",(NR==1?"":"|"),$0}' text
PROMOTIONAL - ATL|36% Extra Money : NML 60=65(Rs.47.85 now, rest Rs.17.15 in 48hrs) + A&B @20p/m +  ACCC DD  for 11 day. 100=100 1 days.|2017-11-21|09:00 AM|10:00 PM|ENGLISH|OR|0.0|10
John1024
sumber