awk一般的な注意事項--awkが外部変数を参照する方法

2496 ワード

channelSubs="a,b,c";
echo "" | awk 'BEGIN{
     n=split('"\"$channelSubs\""',chsu,",");
     for(i=1; i<=n;i++){
        channelSubsMaps[chsu[i]]="1";
     }
}{
   if("1"==channelSubsMaps[channel]){
    print "aaaa"
   }
}' channelSubs="$channelSubs" channel="126354"

1.awkで外部変数定義を参照する場合は「」「適合」
2.awk beginで外部変数を参照するには'''$変数'''''を取得します.
一、awkで変数を呼び出すには以下の方法があります.
1.  awk '{print a, b}' a=111 b=222 yourfile
変数の位置はfile名の前でなければ呼び出せません.
なお、BEGIN{}ではこれらを呼び出すことができないvariableである.後で述べる第2の方法で解決しなければならない.
2.  awk –v a=111 –v b=222 '{print a,b}' yourfile
各変数に-vを加えて伝達することに注意する.
3.  awk '{print "' "$LOGNAME"' "}' yourfile
environment variableを呼び出すには、次の方法で呼び出します.
"  '  "  $LOGNAME  "  '  "
原文:
awk外部変数の参照方法
http://hi.baidu.com/icqncvjhgmbbsyq/item/02ef096ac1d49c94c5d2495a
二、更なる解釈
3つ目の方法は、なぜ2つの二重引用符と1つの単引用符を付けるのですか?
$ str=Hello
$ awk 'BEGIN{print "'$str' "}'
Hello
二重引用符セットの単一引用符のように見えますが、本当の原因は次のとおりです.
これはshellの機能で、shellは単一引用符と二重引用符に対して、左から右の順にペアで一致します.
awkコマンドは、shellがその内容を説明するのを防止するために、単一引用符で囲まれています.
awk '{print "'$str' "}' file
実は2つの部分です
1:awk '{print "'
2:'"}'
すなわちawkは2つの単一引用符内のコマンドに作用する.
$strについてはshellによって変数strの値として正常に解釈される.
したがって、str=helloであれば、解釈してawk{print"hello"}fileとなる
str=hello worldの場合、解釈の前の部分:awk{print"の後、変数を置き換えた後、hello worldになり、shellがhelloとworldの中間のスペースを読むとIFSだと思って、彼らを異なるドメインに置くと、次のように解釈されます.
awk BEGIN{print "hello
world"}の2つの部分.
上記の説明に従って、このように修正することができます.例えば、
a)$ awk 'BEGIN{print "' "$a"' "}'
または
b)$ awk "BEGIN{print\"$a\"}"
または
c)$ awk BEGIN\{print\""$a"\"\}
aについては、
awk BEGIN{print"hello world"}#は$aが置換された後も"に含まれているため、文字列として処理される.
三、まとめ
awkはどうしてもshell環境で実行されます.したがってawkに書かれたコマンドはshell解析を経てawkに解釈して実行される.
原文:
awk外部変数の参照
http://hi.baidu.com/liheng_2009/item/6466a4c0e087222447d5c0c8
次の2つのリンクは、より多くの議論に与えられています.
http://www.linuxsir.org/bbs/thread121709.html
http://bbs.chinaunix.net/thread-1381166-1-1.html