Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxのawk配列操作の詳細

Linuxのawk配列操作の詳細

  

はawkをテキスト処理、そして最後にはその配列処理に使います。それでは、awk配列の特徴は何ですか、一般的な操作はどうですか?以下の紹介を見て、例の中でそれらの違いを説明しましょう。基礎となるタグは数値または文字列のいずれかになるため、awkの配列は連想配列と呼ばれます。 awkの配列は事前に宣言する必要はなく、また宣言する必要もありません。配列要素は、コンテキストに応じて、0または空の文字列で初期化されます。次に例を示します。


まず、メソッドを定義します。


1:値を配列のインデックス(添字)として使用することができます。

 Tarray [ ,null,null,3],1] =< Cheng mo> Tarray [2] =< 800927< p> 2:文字列を配列インデックス(添え字)として使用することができます。
 Tarray [' first'] =' cheng Tarray [last ld] = Taro [出生] = 800927' 

Tarray [1]を押すと、2とrが印刷されます[2]。 [' birth']を印刷すると、< 800927'が表示されます。


2番目に、配列関連の関数

[chengmo @ localhost〜] $ awk --versionGNU Awk 3.1.5

使用バージョンは3.1以降です。次の関数は、異なるバージョンでは必ずしも同じではありません。

  • 配列の長さを取得する(lengthメソッドで使用)

    [chengmo @ localhost〜] $ awk 'BEGIN {info =" itテストではありませんか?" lens = split(info、tA、"); print length(tA)、lens;} '4 4

    lengthは文字列と配列の長さを返し、splitは文字列を分割します。配列の場合は、配列の長さを取得するために分割も返されます。


    (asort):

    [chengmo @ localhost〜] $ awk 'BEGIN {info ="テストです"; split(info、tA、) asort(tA);} '4

    asortは配列を並べ替えて、配列の長さを返します。



  • 配列の内容を出力する(順不同、出力順):

    [chengmo @ localhost〜] $ awk 'BEGIN {info ="(split in info、tA、";(k in tA){print k、tA [k]}} 'のテストです。4 test1 it2 is3 a

    の場合、配列は連想配列であるため、デフォルトは順不同です。そのため、for… inを使って順序付けされていない配列を取得します。順序付き配列を取得する必要がある場合は、添え字で取得する必要があります。


    [chengmo @ localhost〜] $ awk 'BEGIN {info ="これはテストです」; tlen = split(info、tA、");(k) = 1; k <= tlen; k ++){print k、tA [k];}} '1 it2 is3 a4 test

    注:配列の添字は1から始まり、cの配列と同じではありません。




  • キー値の有無の確認とキー値の削除:

    エラー判定方法:

    [chengmo @ localhost〜] $ awk 'BEGIN {tB ["a"] = "a1"; tB ["b"] = "b1"; if(tB ["c"]!= ""; 1 "){print"が見つかりません ";};(tBのk){print k、tB [k];}} 'が見つかりませんa1b b1c


    奇妙な問題、tB [ - c - r]は定義されていませんが、ループが見つかるとキー値はすでに存在し、その値は空になります。ここでは、キーが配列によって参照される限り連想配列です。修正されたシーケンスを自動的に作成します。

    [chengmo @ localhost〜] $ awk 'BEGIN {tB [" a"] =" a1"; tB ["b"] = "b1"; if( "tBのc"){print "ok";}; for(tBのk){print k、tB [k];}} ' a a1b b1

    if(key in array)このメソッドは、配列にキー値が含まれているかどうかを判定するために使用されます。


    Key-Valueを削除します。

    [chengmo @ localhost〜] $ awk 'BEGIN {tB [" a"] =" a1"; tB ["] b "] =" b1 ";(tB内のk)についてtB [" a "]を削除する{print k、tB [k];}} 'b b1


    配列のキー、シーケンス値に対応してdelete array [key]を削除することができます。


    3次元2次元配列の使用(多次元配列の使用)

    Awkの多次元配列は本質的に1次元配列です。より正確には、awkは次の配列に格納されます。多次元配列はサポートされていません。 Awkは二次元配列のアクセスを論理的にシミュレートする方法を提供します。たとえば、array [2,4] = 1のようなアクセスが許可されます。 Awkは、分割フィールドとして特殊文字列SUBSEP(\\ 034)を使用します上記の例では、関連する配列arrayは実際の値2 \\ 0344を格納します。


    多次元配列では、メンバーテストの1次元配列と同様に、if((i、j)in array)の構文を使用できますが、添字は括弧で囲む必要があります。 1次元配列の循環アクセスと同様に、多次元配列はfor(array in item)のような構文を使用して配列を走査します。一次元配列とは異なり、多次元配列はsplit()関数を使用して個々の添え字要素にアクセスしなければなりません。分割(item、subscr、SUBSEP)


    [chengmo @ localhost〜] $ awk 'BEGIN {

    for(i = 1; i< = 9; i ++) {(j = 1; j <= 9; j ++){tarr [i、j] = i * j; print i、 "*"、j、 "="、tarr [i、j]; 1 * 1 = 11 * 2 = 21 * 3 = 31 * 4 = 41 * 5 = 51 * 6 = 6

    ……

    は配列[k]に渡すことができます


    方法2:

    [chengmo @ localhost〜] $ awk 'BEGIN {for(i = 1; i< = 9);(i ++){((j = 1; j <= 9; j ++)の場合} {tarr [i、j] = i * j;}} for(m in tarr){split(m、tarr2、SUBSEP); print tarr2 [ ,null,null,3],1]、" *"、tarr2 [2]、" ="、tarr [m];}} '


    上記はawkによる配列の処理に関連している、希望みんなに便利です。

  • Copyright © Windowsの知識 All Rights Reserved