2016-05-06 14 views
0
line=catsanddogs;awk -v var="$line" RS= '$3=="`var`"' master_file.sql > jaylog 
awk: cmd. line:1: RS= 
awk: cmd. line:1: ^unexpected newline or end of string 

このステートメントに変数を組み込もうとしていますが、正しく動作する構文が得られません。awkステートメントの構文の問題

次は、もちろん、正常に動作します:

awk -v RS= '$3=="`catsanddogs`"' master_file.sql > jaylog 

答えて

3

は、2つの問題があります。あなたが変数の代入前に-vオプションを使用していなかったので、まず

awkは、引数RS=は、スクリプトで考えて、それが有効なawkスクリプトではありません。

第2に、awkは引用符で囲まれた文字列内の変数を展開しません。文字通り処理されます。 var変数をバックティック文字列に連結し、文字列の中に入れないでください。

awk -v var="$line" -v RS= '$3=="`" var "`"' master_file.sql > jaylog 
+0

右と入力行が大きい場合には、 'awkの-v VAR = "$ラインが" -v RS = '{ "'\" TGTは= "\'" VAR} BEGIN $ 3 == TGT' を行うことを検討master_file.sql'を使用すると、入力ファイルのすべての行の文字列連結を避けることができます。これは、最も遅い操作(I/Oよりも遅い場合もあります)です。適度なサイズのファイルでは問題になりません。 –