awk comando dando erro “string não terminada”

0

Quando estou usando o comando awk para inserir uma linha, ele está dando erro de string não finalizado.

arquivo de entrada é como

date      mean       rms       bias                                       
.....    .....       ....      .......                                         
.....       .....        ........           .........                         
......        ........  .......           .......

Aqui eu preciso inserir novos valores de data, mean, rms e bias.

meu script é assim

echo $PDY $mean $rms  $bias                                      
awk '/Date/ { print; print "'$PDY' \t'$mean' \t'$rms' \t'$bias'"; next }1' file.txt

O registro do terminal é assim

+ echo 20180131 76.196 578.177 903.000                        
20180131 76.196 578.177 903.000
+ awk '/Date/ { print; print "20180131 \t' '76.196 \t578.177 \t903.000"; next }1' file.txt                                                      
awk: /Date/ { print; print "20180131 \t
awk:                       ^ unterminated string

Existe um '' (gap / space) vindo depois de print; print "20180131 \t no meu comando awk. Eu não sei porque está vindo

Por favor, me dê uma solução.

    
por bushair 15.02.2018 / 14:47

2 respostas

1

Sua string começa com ' e termina com o segundo ' :

awk '/Date/ { print; print "20180131 \t'

A string não terminada da mensagem de erro é "20180131 \t .

Em vez disso, use " e escape do " com \" :

awk "/Date/ { print; print \"20180131 \t' '76.196 \t578.177 \t903.000\"; next }1" file.txt
    
por 15.02.2018 / 15:01
0

A mensagem de erro significa que awk não gosta da maneira como você está usando aspas. Olhando para a sua declaração awk , gostaria de apontar primeiro para o seu uso freqüente de aspas simples dentro de sua declaração impressa. awk está interpretando o aspas simples após \t marcar o final de todo o seu programa awk (que você começou com um aspas simples após a palavra-chave awk ) e, nesse ponto, não houve duplicação de fechamento -quota para o seu comando de impressão (nem uma chave de fechamento para sua declaração awk ).

A maneira mais fácil de passar variáveis para um programa awk é usar o argumento de linha de comando -V , por exemplo. Variáveis awk -V pdy="$PDY" -V mean="$mean", and then use pdy and mean as native awk '. Com este método, não haverá necessidade da maioria das suas citações.

    
por 15.02.2018 / 15:03

Tags