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 \t
awkコマンドの後に ""(スペース/スペース)があります。なぜ出てくるのか分からない
解決策を教えてください。
答え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
コマンドライン引数を使用することです-V
。awk -V pdy="$PDY" -V mean="$mean", and then use
pdyはawk`変数をand
表します。as native
このアプローチでは、ほとんどの参照は必要ありません。