awkでのループループ_awkでループを使用する方法
11676 ワード
awkでのループループ
Awkスクリプトには、オプションのBEGINとEND関数、および各レコードで実行される記述関数の3つの主要な部分があります.ある程度awkスクリプトのボディはループです.関数のコマンドはレコードごとに実行されるためです.ただし、1つのレコードでコマンドを複数回実行したい場合があります.これを実現するには、ループを作成する必要があります.
いくつかのサイクルがあり、それぞれのサイクルには独特の用途があります.
whileはテスト条件をループし、コマンドを実行し、テストはtrueを返します.テストがfalseに戻ると、ループが中断されます.
do whileループは、キーワードdoの後にコマンドを実行します.その後、テストを実行して、停止条件が満たされているかどうかを決定します.コマンドは、テストがtrue(終了条件を満たしていない)を返す場合にのみ繰り返します.テストに失敗すると、終了条件が満たされているため、ループが中断されます.
awkには2つのforサイクルがあります.
forループは変数を初期化し、テストを実行し、変数を一緒に増やし、trueとしてテストしたときにコマンドを実行します.
この例では、Unixコマンドuniqの簡略化されたバージョンを実現します.文字列リストをaと呼ばれる配列にキーとして追加し、同じキーが表示されるたびに値をインクリメントすることで、uniqの--countオプションなどの文字列の出現回数を算出できます.配列のキーを印刷すると、1回または複数の文字列が表示されます.
例えば、プレゼンテーションファイルを使用する.txt(以前の記事から):
ループは任意のプログラミング言語の重要な構成部分であり、awkも例外ではない.ループを使用すると、awkスクリプトの実行方法を制御し、どのような情報を収集し、データをどのように処理するかを制御できます.次の記事では、switch文、continue、nextについて説明します.
この文章を聞いてもいいですか.ハッカーコミュニティ放送会社のHacker Public Radioのセットから改編され、ハッカー向けのコンテンツです.
翻訳:https://opensource.com/article/19/11/loops-awk
awkでのループループ
Awkスクリプトには、オプションのBEGINとEND関数、および各レコードで実行される記述関数の3つの主要な部分があります.ある程度awkスクリプトのボディはループです.関数のコマンドはレコードごとに実行されるためです.ただし、1つのレコードでコマンドを複数回実行したい場合があります.これを実現するには、ループを作成する必要があります.
いくつかのサイクルがあり、それぞれのサイクルには独特の用途があります.
Whileサイクル
whileはテスト条件をループし、コマンドを実行し、テストはtrueを返します.テストがfalseに戻ると、ループが中断されます.
#!/bin/awk -f
BEGIN
{
# Loop through 1 to 10
i =
1 ;
while
( i
< =
10
)
{
print i,
" to the second power is " , i
* i;
i = i+
1 ;
}
exit ;
}
この簡単な例では、awk印刷変数iに含まれる任意の整数の二乗を印刷する.while(i<=10)のフレーズはawkがiの値が10以下の場合にのみループを実行することを示す.最終反復(iは10)の後、ループは終了する.whileループをする
do whileループは、キーワードdoの後にコマンドを実行します.その後、テストを実行して、停止条件が満たされているかどうかを決定します.コマンドは、テストがtrue(終了条件を満たしていない)を返す場合にのみ繰り返します.テストに失敗すると、終了条件が満たされているため、ループが中断されます.
#!/usr/bin/awk -f
BEGIN
{
i =
2 ;
do
{
print i,
" to the second power is " , i
* i;
i = i +
1
}
while
( i
<
10
)
exit ;
}
ループの場合
awkには2つのforサイクルがあります.
forループは変数を初期化し、テストを実行し、変数を一緒に増やし、trueとしてテストしたときにコマンドを実行します.
#!/bin/awk -f
BEGIN
{
for
(
i =
1 ; i
< =
10 ; i++
)
{
print i,
" to the second power is " , i
* i;
}
exit ;
}
別のforループは、変数を配列の連続インデックスに設定し、各インデックスに対してコマンドセットを実行します.すなわち、配列を使用してレコードからデータを「収集」します.この例では、Unixコマンドuniqの簡略化されたバージョンを実現します.文字列リストをaと呼ばれる配列にキーとして追加し、同じキーが表示されるたびに値をインクリメントすることで、uniqの--countオプションなどの文字列の出現回数を算出できます.配列のキーを印刷すると、1回または複数の文字列が表示されます.
例えば、プレゼンテーションファイルを使用する.txt(以前の記事から):
name color amount
apple red 4
banana yellow 6
raspberry red 99
strawberry red 3
grape purple 10
apple green 8
plum purple 2
kiwi brown 4
potato brown 9
pineapple yellow 5
これはawk形式のuniq-cの簡単なバージョンです.
#! /usr/bin/awk -f
NR
! =
1
{
a
[
$2
] ++
}
END
{
for
( key
in a
)
{
print a
[ key
]
" " key
}
}
サンプル・データ・ファイルの3番目の列には、1番目の列にリストされたアイテムの数が含まれます.配列とforループを使用して、3番目の列のアイテムを色別にカウントできます.
#! /usr/bin/awk -f
BEGIN
{
FS =
" " ;
OFS =
" \t " ;
print
(
"color \t sum"
) ;
}
NR
! =
1
{
a
[
$2
] +=
$3 ;
}
END
{
for
( b
in a
)
{
print b, a
[ b
]
}
}
ご覧のように、ファイルを処理する前に、BEFORE関数にタイトル列を印刷する必要があります(この列は常に1回のみ発生します).ループ
ループは任意のプログラミング言語の重要な構成部分であり、awkも例外ではない.ループを使用すると、awkスクリプトの実行方法を制御し、どのような情報を収集し、データをどのように処理するかを制御できます.次の記事では、switch文、continue、nextについて説明します.
この文章を聞いてもいいですか.ハッカーコミュニティ放送会社のHacker Public Radioのセットから改編され、ハッカー向けのコンテンツです.
翻訳:https://opensource.com/article/19/11/loops-awk
awkでのループループ