ウェブサイト検索

15 の興味深い awk コマンド


この記事では、いくつかの興味深い awk コマンドと、それらをいつ使用するかを説明します。詳細については、以下をお読みください。

awk の概要

AWK は、UNIX および Linux で人気のある言語です。この名前は、著者であるアルフレッド・アホ、ピーター・ワインバーガー、ブライアン・カーニハンに由来しています。 awk コマンドを使用すると、テキスト ストリーム内のデータを処理するように設計された AWK プログラミング言語にアクセスできます。

パターンのスキャンや複雑な操作の簡素化によく使用される awk は、ファイル内のテキスト パターンを定義するための効果的なステートメントを作成するのに役立ちます。次に、awk コマンドは一度に 1 行を読み取ることでこれらのステートメントを処理し、指定された条件に基づいてアクションを実行します。

簡単に言えば、awk はテキストを検索して置換し、指定されたデータの並べ替え、検証、またはインデックス付けを支援します。

AWKの特徴

awk には多くのユニークな機能が備わっています。

  1. awk ではコンパイルは必要ありません

  2. データ抽出によく使用されます

  3. テキスト操作を実行するためによく使用されます

  4. 必要に応じて結果を生成するのに役立ちます。

次に、awk コマンドの機能を見てみましょう。

15 の興味深い awk コマンド

以下は、いくつかの興味深い awk コマンドをまとめたリストです。

  1. Printing random numbers in a set – Suppose you want to print a few random numbers from a selected pool. You can specify the quantity of random numbers from this pool and ask awk to print this. Here’s an example: let’s print 10 numbers from 0 to 1000. So the awk command for this will be as follows:
    awk 'BEGIN { for (i = 1; i <= 10; i++)
    print int(1001 * rand()) }'
  1. Searching for foo or bar – What if you want to write a line in which you want to perform a simple search for foo or bar? Here’s a command that will allow you to do just that:
    if (/foo/ || /bar/)
    print "Found!"
  1. Rearranging a field – If you want to print a particular field in a particular order, awk can do it for you. Suppose you want to print the first 5 fields of a particular set in one field per line, you can use the following command:
    awk ’{ i = 1
    while (i <= 3) {
    print $i
    i++
    }
    }’ inputfile
  1. Splitting a line – In any given set of files, awk can help split a line into fields, where x is the name of the field:
    $ awk '{print $x,$x}'xyz.txt
  1. Running several commands at once – To run several commands at once, you can use a semicolon to specify both the commands:
    $ echo "Good morning! Jack" | awk '{$2="Jill"; print $0}'
  1. Executing an awk script – If you want to execute an awk script from a particular file, you can create a file sum_column and paste the below script in that file:
    #!/usr/bin/awk -f
    BEGIN {sum=0}
    {sum=sum+$x}
    END {print sum}

    In the above script, x equals the column you need to input in the file. On the successful completion of this task, you can use the following command to display the sum of the x column in the input file:

    awk -f sum_column input_file.
  1. Using –f – When coding, it may often seem impractical to refer to the terminal. awk uses –f to perform search from a file:
    awk -f script.awk inputfile
  1. Performing Math functions – You can also use awk for simple Math functions:
    awk ’{ sum = $2 + $3 + $4 ; avg = sum / 3
    > print $1, avg }’ grades
  1. Hello World in awk – You can print a simple Hello World in awk using the following command:
    awk "BEGIN { print "Hello World!!" }"

    You can also create a Hello World program. The following code will not only print the ubiquitous hello message but will also generate header information:

    $ awk 'BEGIN { print "Hello World!" }'
  1. Printing the total number of bytes – You can find out the total bytes used by files using the following command:
    ls -l . | awk '{ x += $5 } ; END \
    { print "total bytes: " x }'

    total bytes: 7449362
  1. Anonymizing an Apache log – You can use the following code to anonymize an Apache log:
    cat apache-anon-noadmin.log | \
    awk 'function ri(n) \
    {  return int(n*rand()); }  \
    BEGIN { srand(); }  { if (! \
    ($5 in jack)) {  \
    jack[$5] = sprintf("%d.%d.%d.%d", \
    ri(255), ri(255)\
    , ri(255), ri(255)); } \
    $5 = jack[$5]; print __g5_token5b610ba53dbe4  }'
  1. Operating in rows – If you have an address that you would like to sort in rows, you can do so using the following command:
    BEGIN { RS = "" ; FS = "\n" }
    {
    print "Name is:", $1
    print "Address is:", $2
    print "City and State are:", $3
    print ""
    }
  1. Using the while loop – The while loop keeps on executing the action given to it in a repeated process until the condition is true. For example, for printing numbers from 1 to 100, you can use the following code:
    awk 'BEGIN {i = 1; while (i < 100) { print i; ++i } }'
  1. Using the do-while loop – In this loop, the condition gets executed at the end of the loop even if the statement is false. For example, to print numbers from 1 to 100 using a do-while loop, you can use the following code:
    awk 'BEGIN {i = 1; do { print i; ++i } while (i < 100) }'
  1. Using BEGIN and END – The BEGIN keyword is used to create a header for processing your record:
    $ awk 'BEGIN {print "XXX"}

    In the same way, the END keyword is used after processing the data:

    END {print "File footer"}'