Awk 変数、数値式、代入演算子の使用方法を学ぶ - パート 8
Awk コマンド シリーズはますますエキサイティングになってきています。これまでの 7 つのパートで、Linux で基本的なテキストまたは文字列のフィルタリングを実行できるようにするためにマスターする必要があるAwk の基礎について説明したと思います。
この部分から始めて、より複雑なテキストまたは文字列のフィルタリング操作を処理するためのAwk の高度な領域について詳しく説明します。したがって、変数、数値式、代入演算子などのAwk 機能について説明します。
これらの概念は、シェル、C、Python、その他多くのプログラミング言語が登場する以前におそらく遭遇した可能性のある概念と包括的に異なるものではありません。そのため、このトピックについてあまり心配する必要はありません。単に、使用に関する一般的な概念を改訂しているだけです。これらの言及された機能。
これはおそらく最も理解しやすいAwk コマンド セクションの 1 つであるため、落ち着いて作業を始めましょう。
1.awk 変数
どのプログラミング言語でも、変数は値を格納するプレースホルダーです。プログラム ファイルに変数を作成すると、ファイルが実行されると、変数に指定した値を格納するスペースがメモリ内に作成されます。
次のようにシェル変数を定義するのと同じ方法でAwk 変数を定義できます。
variable_name=value
上記の構文では次のようになります。
variable_name
: 変数に付ける名前です。value
: 変数に格納されている値
以下にいくつかの例を見てみましょう。
computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”
上記の簡単な例を見てください。最初の変数定義では、値 linux-console.net
が変数 computer_name
に割り当てられています。
さらに、値 22
が変数 port_no
に割り当てられています。値を割り当てた最後の例のように、ある変数の値を別の変数に割り当てることもできます。 computer_name
を変数サーバーに送信します。
思い出せれば、この Awk シリーズのパート 2 でフィールド編集について説明したとき、Awk が入力行をフィールドに分割し、標準のフィールド アクセス演算子である $
を使用してさまざまなフィールドを読み取る方法について説明しました。解析されています。次のように変数を使用してフィールドの値を保存することもできます。
first_name=$2
second_name=$3
上記の例では、first_name
の値が 2 番目のフィールドに設定され、first_name
が 3 番目のフィールドに設定されます。
例として、アプリケーションのユーザーの姓名と性別を示すリストが含まれる names.txt
という名前のファイルを考えてみましょう。 cat コマンドを使用すると、次のようにファイルの内容を表示できます。
cat names.txt
次に、Awk を実行することによって、変数 first_name
と next_name
を使用して、リストの最初のユーザーの名と 2 番目の名前を保存することもできます。 > 以下のコマンド:
awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt
別のケースも見てみましょう。ターミナルでコマンド uname -a
を発行すると、すべてのシステム情報が出力されます。
2 番目のフィールドには hostname
が含まれているため、hostname という変数に hostname を保存し、Awk を使用して出力できます。 > 次のように:
uname -a
uname -a | awk '{hostname=$2 ; print hostname ; }'
2. 数値式
Awk では、次の数値演算子を使用して数値式が構築されます。
*
: 乗算演算子+
: 加算演算子/
: 除算演算子-
: 減算演算子%
: 剰余演算子^
: べき乗演算子
数値式の構文は次のとおりです。
operand1 operator operand2
上記の形式では、operand1
と operand2
は数値または変数名にすることができ、operator
は上記の演算子のいずれかです。
以下に、数値式を作成する方法を示すいくつかの例を示します。
counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1
Awk での数値式の使用を理解するために、Tecmintが所有するすべてのドメインを含むファイル domains.txt
を使用した次の例を考えてみましょう。強い>。
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
ファイルの内容を表示するには、次のコマンドを使用します。
cat domains.txt
ファイル内にドメイン linux-console.net
が出現する回数をカウントしたい場合は、次のようにそれを行うための簡単なスクリプトを作成できます。
#!/bin/bash
for file in $@; do
if [ -f $file ] ; then
#print out filename
echo "File is: $file"
#print a number incrementally for every line containing linux-console.net
awk '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }' $file
else
#print error info incase input is not a file
echo "$file is not a file, please specify a file." >&2 && exit 1
fi
done
#terminate script with exit code 0 in case of successful execution
exit 0
スクリプトを作成した後、保存して実行可能にし、ファイル domains.txt
を出力入力として実行すると、次の出力が得られます。
./script.sh ~/domains.txt
スクリプトの出力から、ファイル domains.txt
には linux-console.net
を含む 6 行があり、手動でカウントできることを確認します。
3. 代入演算子
最後のAwk 機能は代入演算子です。Awk にはいくつかの代入演算子があり、これらには次のようなものがあります。
*=
: 乗算代入演算子+=
: 加算代入演算子/=
: 除算代入演算子-=
: 減算代入演算子%=
: モジュラス代入演算子^=
: べき乗代入演算子
Awk での代入操作の最も単純な構文は次のとおりです。
variable_name=variable_name operator operand
例:
counter=0
counter=counter+1
num=20
num=num-1
上記の代入演算子を使用すると、Awk での代入操作を短縮できます。前の例を考慮すると、次の形式で代入を実行できます。
variable_name operator=operand
counter=0
counter+=1
num=20
num-=1
したがって、次のように +=
代入演算子を使用して、上で作成したシェル スクリプトの Awk コマンドを変更できます。
#!/bin/bash
for file in $@; do
if [ -f $file ] ; then
#print out filename
echo "File is: $file"
#print a number incrementally for every line containing linux-console.net
awk '/^linux-console.net/ { counter+=1 ; printf "%s\n", counter ; }' $file
else
#print error info incase input is not a file
echo "$file is not a file, please specify a file." >&2 && exit 1
fi
done
#terminate script with exit code 0 in case of successful execution
exit 0
Awk シリーズのこのセグメントでは、変数、数値式の構築、代入演算子の使用など、 いくつかの強力なAwk 機能を取り上げ、さらにそれらを実際に使用する方法をいくつかの図で説明しました。
これらの概念は他のプログラミング言語の概念と何ら変わりませんが、Awk プログラミングではいくつかの重要な違いがある可能性があります。
パート 9 では、特殊なパターンである Awk 機能、BEGIN
と END
についてさらに見ていきます。それまではTecmint に接続してください。