堪能なawkシリーズ(14):精巧なawkの変数と変数の代入


戻ります:


awkの変数

awkの変数は、使用時に宣言した動的変数、です。

だから、awkの変数は、3つの状態があります。

  • 宣言されていない状態:型が型なしと呼ばれています
  • 引用しなかったがアサイン状況:未割り当てのタイプ
  • 大切なステータス

空の文字列またはデフォルトの初期値は0である未割り当ての参照変数、

awkの宣言されていない変数の変数は、型指定されていないと呼ばれるが、割り当てられていないため、その型の(宣言に上場限り)割り当てを宣言していませんでした。

gawkのバージョン4.2が提供するtypeof()関数を、変数宣言するかどうかをテストを含む変数のデータ・タイプをテストすることができます。

awk 'BEGIN{
  print(typeof(a))            # untyped
  if(b==0){print(typeof(b))}  # unassigned
}'

加算typeof演算()において、また、以下の技術を用いて検出することができます。

awk 'BEGIN{
  if(a=="" && a==0){    # 未赋值时,两个都true
    print "untyped or unassigned"
  } else {
      print "assigned"
  }
}'

変数代入

代入文でのawkの変数は、として見ることができる値への回帰式の。

例えば、a=3変数はまた、3に設定されている割り当てが完了した後、3を返します。

この機能に基づいて、2回の使用があります。

  • それはあるx=y=z=5と等価z=5 y=5 x=5
  • あなたは式が許可されている任意の割り当てを置くことができます
    • x != (y = 1)
    • awk 'BEGIN{print (a=4);print a}'

質問:a=1;arr[a+=2] = (a=a+6)割り当て、結果の対応する要素が等しいですか?arr[3]=7しかし、理由はawkの異なる割り当ての左側と評価順序の右側が異なる場合があることにいたしません。

awkの変数は、位置を宣言しました

  1. 主又は開始または終了コードセグメントで直接参照または割り当て
  2. 使用-v var=valオプションは、複数の定義、それはawkのコードの前に配置する必要があります
    • これは、BEGINブロック変数の宣言に早いです
    • 通常の変数:awk -v age=123 'BEGIN{print age}'
    • 使用シェル変数の割り当ては:awk -v age=$age 'BEGIN{print age}'
  3. awkは、後でコードを使用var=valパラメータを
    • BEGINの後にその変数の宣言
    • awk '{print n}' n=3 a.txt n=4 b.txt
    • awk '{print $1}' FS=' ' a.txt FS=":" /etc/passwd
    • シェル変数の割り当てを使用します:awk '{print age}' age=$age a.txt

awkのに使用されるシェル変数

AWKでシェル変数を使用するには、次の3つの方法があります。

AWKのシェル変数の代入変数に-vオプションで1

num=$(cat a.txt | wc -l)
awk -v n=$num 'BEGIN{print n}'

-vオプションは、ワークフローAWKの第一段階で解析され、変数は、{} BEGIN -vオプションで宣言END {}とメインコードセグメントを直接使用することができます。

3.シェル変数は、直接解析された変数シェルシェル交換にAWKコード部分を露出します

num=$(cat a.txt | wc -l)
awk 'BEGIN{print '"$num"'}'

最も柔軟性が、最悪の可読性このように、引用符が多数表示されることがあります。

おすすめ

転載: www.cnblogs.com/f-ck-need-u/p/12005588.html