GNU/Linux >> Linux の 問題 >  >> Linux

数値用の 9 つの強力な awk 組み込み関数

awk 組み込み変数と同様に、awk にも数値、文字列、入力用の組み込み関数が多数あります。 、および出力操作。 Awk には、次の 3 種類の高レベルの組み込み関数カテゴリがあります。

<オール>
  • 数値演算用の組み込み関数
  • 文字列操作用の組み込み関数
  • 入出力操作用の組み込み関数

  • awk を初めて使用する方は、進行中の awk の例シリーズを参照してください。ここでは、awk の紹介、awk 変数、および awk 演算子について説明しています。

    この記事では、awk Numeric 組み込み関数を確認しましょう。

    1. awk int(n) 関数

    int() 関数は、指定された引数の整数部分を提供します。これにより、指定された n の最小の整数部分が生成されます。 n は、浮動小数点を含むまたは含まない任意の数値です。引数として整数を指定すると、この関数は同じものを返します。浮動小数点数の場合、切り捨てます。

    $ awk 'BEGIN{
    print int(3.534);
    print int(4);
    print int(-5.223);
    print int(-5);
    }'
    3
    4
    -5
    -5

    2. awk log(n) 関数

    log() 関数は、与えられた引数 n の自然対数を提供します。 log() は、n が正の数の場合にのみ対数値を返します。無効な数値 (マイナスであっても) を指定すると、エラーがスローされます。

    $ awk 'BEGIN{
    print log(12);
    print log(0);
    print log(1);
    print log(-1);
    }'
    2.48491
    -inf
    0
    nan

    上記の出力では、log(0) が -inf として示されている無限大であることを識別でき、log(-1) はエラー nan (Not a Number) を返します

    3. Awk sqrt(n) 関数

    sqrt 関数は、指定された整数 n の正の平方根を返します。この関数は正の数も受け入れます。負の数を引数として指定すると、nan エラーが返されます。

    $ awk 'BEGIN{
    print sqrt(16);
    print sqrt(0);
    print sqrt(-12);
    }'
    4
    0
    nan

    4. awk exp(n) 関数

    exp 関数は e の n 乗を提供します。

    $ awk 'BEGIN{
    print exp(123434346);
    print exp(0);
    print exp(-12);
    }'
    inf
    1
    6.14421e-06

    上記の出力では、exp(1234346) に対して、範囲外であるため、出力無限大が得られます。

    5. awk sin(n) 関数

    sin() 関数は、n の正弦値を返します。n はラジアンです。

    $ awk 'BEGIN {
    print sin(90);
    print sin(45);
    }'
    0.893997
    0.850904

    6. awk cos(n) 関数

    cos() は、n の余弦値を返します。n はラジアンです。

    $ awk 'BEGIN {
    print cos(90);
    print cos(45);
    }'
    -0.448074
    0.525322

    7. Awk atan2(m,n) 関数

    この関数は、m/n の逆正接をラジアンで返します。

    $ awk 'BEGIN {
    print atan2(30,45);
    
    }'
    0.588003

    8. Awk rand() 関数

    rand() は、0 と 1 の間の乱数を生成するために使用されます。0 と 1 を返すことはありません。常に 0 と 1 の間の値を返します。数値は 1 回の awk 実行ではランダムですが、実行ごとに予測可能です。 Awk は、何らかのアルゴリズムを使用して乱数を生成します。このアルゴリズムは固定されているため、数値は再現可能です。

    次の例では、0 から 100 までの 1000 個の乱数を生成し、各数値が使用された頻度を示しています

    $cat rand.awk
    BEGIN {
    while(i<1000)
    {
    	n = int(rand()*100);
    	rnd[n]++;
    	i++;
    }
    for(i=0;i<=100;i++) {
    	print i,"Occured", rnd[i], "times";
    }
    }
    $

    上記のスクリプトの出力の一部をここに貼り付けます。

    $awk -f rand.awk
    0 Occured 6 times
    1 Occured 16 times
    2 Occured 12 times
    3 Occured 6 times
    4 Occured 13 times
    5 Occured 13 times
    6 Occured 8 times
    7 Occured 7 times
    8 Occured 16 times
    9 Occured 9 times
    10 Occured 6 times
    11 Occured 9 times
    12 Occured 17 times
    13 Occured 12 times

    上記の出力から、rand() 関数が反復可能な数値を頻繁に生成できることを確認してください。

    9. Awk srand(n) 関数

    srand() は、指定された引数 n で乱数生成を初期化するために使用されます。そのため、プログラムの実行が開始されるたびに、n から数値の生成が開始されます。引数が指定されていない場合、時刻を使用してシードを生成します。

    例。 5 から 50 までの 5 つの乱数を生成します

    $cat srand.awk
    BEGIN {
    #initialize the seed with 5.
    srand(5);
    # Totally I want to generate 5 numbers.
    total=5;
    #maximum number is 50.
    max=50;
    count=0;
    while(count < total) {
    	rnd = int(rand() * max);
    	if ( array[rnd] == 0 ) {
    		count++;
    		array[rnd]++;
    	}
    }
    for ( i=5; i<=max; i++) {
    	if ( array[i] )
    		print i;
    }
    }

    この srand.awk で、rand() 関数を使用して数値を生成し、最大値を乗算して最大 50 の数値を生成し、生成された乱数が配列に既に存在するかどうかを確認し、存在しない場合は、そのインデックスをインクリメントし、ループ カウントをインクリメントします。このように 5 つの数値を生成し、最後に for ループで最小数値から最大数値まで生成し、値を持つインデックスのみを出力します。

    上記のスクリプトの出力は次のとおりです

    $ awk -f  srand.awk
    9
    15
    26
    37
    39

    Linux
    1. Linux Cプログラミングチュートリアルパート18:再帰関数

    2. Awk内のBashスクリプトでBash関数を呼び出す方法は?

    3. TagSpaces –Linux用の強力なタグ指向ファイルオーガナイザー

    1. NordPass –Linux用の強力なパスワードマネージャー

    2. 8 つの強力な Awk 組み込み変数 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

    3. シェル スクリプトで関数名のリストを取得する

    1. 強力なテキスト解析ツールであるawkの使用を開始する

    2. シェル変数の関数?

    3. 用語をgrepして別の用語を除外する