Obtendo erro AWK durante a transposição de algum conteúdo da mensagem


1

Eu tentando transpor abaixo o texto em uma única linha com pipe separado, eu estou recebendo algum erro se o texto é começar com o número%, qual é o problema, qualquer outro comando está lá

Amostra de conteúdo no arquivo 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

comando do awk usando:

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

Erro:

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

Respostas:


1

O problema é que o primeiro argumento para printf deve ser uma string de formato. Em strings de formato, os sinais de porcentagem são tratados especialmente. Para evitar o problema com sua entrada contendo um % assine, tente:

$ 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

Aqui, o primeiro argumento para printf, sendo a string de formato, é %s. o %s instrui o awk a pegar o segundo argumento e formatá-lo como uma string. O segundo argumento pode incluir % ou não, isso não importa.

Ou, equivalentemente, podemos usar:

$ 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.