2010-12-04 8 views
11

未定義のインデックス番号を持つBEGIN文で配列を定義したいと思います。どうすればAWKでこれを行うことができますか?AWKでBegin Statementで動的配列を定義する方法

BEGIN {send_packets_0to1 = 0;rcvd_packets_0to1=0;seqno=0;count=0; n_to_n_delay[];}; 

私はn_to_n_delay []に問題があります。

答えて

18

info gawkは、部分的に、言う: "awkの中

配列は、表面的に他のプログラミング 言語の配列に似ていますが、根本的な違いがあります。 'awk'では、配列を使用する前に配列のサイズを指定するのに、 は必要ありません。 さらに、連続する の整数だけでなく、 'awk'の任意の数または文字列を配列インデックスとして使用できます。

他のほとんどの言語では、配列は使用前に「宣言」されている必要があります。 には、 に含まれる要素またはコンポーネントの数が含まれています。このような言語では、宣言により、メモリの連続するブロック がその多くの要素に割り当てられます。通常、インデックスは で、配列は正の整数でなければなりません。

あなたは配列として変数を「宣言」したい場合は、そのスカラーしてエラーが発生したとして、あなたはBEGIN句でこれを含めることができ、後で誤ってそれを参照:

意志
split("", n_to_n_delay) 

空の配列を作成します。

これは、既存の配列を空にするためにも使用できます。 gawkにはdeleteを使用できますが、AWKの他のバージョンでは使用できません。

+0

TanX Denis、それは私のための完全な情報を使用しています。 – Am1rr3zA

1

awkで配列を定義する必要はないと思います。以下の例のように使用してください:

{ 
    if ($1 > max) 
    max = $1 
    arr[$1] = $0 
} 

END { 
    for (x = 1; x <= max; x++) 
    print arr[x] 
} 

別に定義されていないことに注意してください。この例はThe AWK Manualから取られています。

+0

はい、awkはハッシュマップしか持たず、宣言も必要ありません。 –

関連する問題