awk 命令给出“未终止的字符串”错误

awk 命令给出“未终止的字符串”错误

当我使用 awk 命令插入一行时,它给出了未终止的字符串错误。

输入文件就像

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

在这里我需要插入日期、平均值、均方根和偏差的新值。

我的脚本是这样的

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

终端日志是这样的

+ 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

print; print "20180131 \t我的 awk 命令后面有一个“ ”(间隙/空格) 。我不知道为什么它会来

请给我一个解决方案。

答案1

您的字符串以'第二个开头和结尾'

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

错误消息中未终止的字符串是"20180131 \t

相反,使用"和转义内部:"\"

awk "/Date/ { print; print \"20180131 \t' '76.196 \t578.177 \t903.000\"; next }1" file.txt

答案2

该错误消息意味着awk不喜欢您使用引号的方式。浏览一下您的awk声明,我首先指出您在打印声明中频繁使用单引号。awk将后面的单引号解释\t为标记整个程序的结束awk(您在关键字 后面以单引号开始awk),并且此时您的 print 命令没有结束双引号(也没有右大括号)供您awk发言)。

将变量传递到程序中的更简单方法awk是使用命令行参数-V,例如。awk -V pdy="$PDY" -V mean="$mean", and then usepdyand表示as nativeawk` 变量。使用这种方法,将不需要大部分引用。

相关内容