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

1

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

Exemplo 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 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
    
por Arun Binoy 21.11.2017 / 07:34

1 resposta

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 sinal % , 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 para pegar o segundo argumento e formatá-lo como uma string. O segundo argumento pode incluir % ou não, não importa.

Ou, de forma equivalente, 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
    
por 21.11.2017 / 08:15