awkコマンドは「終了していない文字列」エラーを発生させます。

awkコマンドは「終了していない文字列」エラーを発生させます。

awkコマンドを使用して行を挿入すると、終了していない文字列エラーが発生します。

入力ファイルは次のとおりです

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

ここに日付、平均、rms、および偏差の新しい値を挿入する必要があります。

私のスクリプトは次のとおりです

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 \tawkコマンドの後に ""(スペース/スペース)があります。なぜ出てくるのか分からない

解決策を教えてください。

答え1

文字列は'2番目の文字列で始まり、終了します'

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閉じ括弧)はありません。awk

プログラムに変数を渡すより簡単な方法は、awkコマンドライン引数を使用することです-Vawk -V pdy="$PDY" -V mean="$mean", and then usepdyはawk`変数をand表します。as nativeこのアプローチでは、ほとんどの参照は必要ありません。

関連情報