Linux の Awk で「next」コマンドを使用する方法 - パート 6
Awk シリーズのこの第 6 部では、next
コマンドの使用について見ていきます。このコマンドは、指定した残りのパターンと式をすべてスキップし、代わりに次のパターンを読み取るように Awk に指示します。入力ライン。
next
コマンドは、コマンド実行における時間の無駄なステップと呼ばれるものの実行を防ぐのに役立ちます。
その仕組みを理解するために、次のような food_list.txt というファイルについて考えてみましょう。
No Item_Name Price Quantity
1 Mangoes $3.45 5
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15
6 Bananas $3.45 30
数量が 20 以下の食品に、各行の末尾に (*)
記号を付けてフラグを立てる次のコマンドを実行することを検討してください。
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
上記のコマンドは実際には次のように動作します。
- まず、各入力行の 4 番目のフィールドの数量が 20 以下であるかどうかを確認します。値がその条件を満たしている場合は、その値が出力され、
(*)
というフラグが付けられます。 式 1 を使用して最後に署名します:$4 <= 20
- 次に、各入力行の 4 番目のフィールドが 20 より大きいかどうかを確認し、行が条件を満たしている場合は、式 2:
$4 > 20
を使用して出力されます。
しかし、ここで 1 つ問題があります。最初の式が実行されると、フラグを立てたい行が { printf "%s\t%s\n", $0, を使用して出力されます。 "**" ; }
を実行すると、同じステップで2 番目の式もチェックされますが、これは時間の無駄になります。
したがって、最初の式を使用して出力された、すでにフラグが設定されている行を出力した後に、2 番目の式 $4 > 20
を再度実行する必要はありません。
この問題に対処するには、次のように next
コマンドを使用する必要があります。
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
$4 <= 20
{ printf "%s\t%s\n", $0,"*" ; を使用して 1 つの入力行が出力された後、次 ; }
の場合、含まれている next
コマンドは 2 番目の式 $4 > 20
{ print $0 ;}
をスキップするのに役立ちます。そのため、実行は次のようになります。数量が 20 より大きいかどうかを確認するのに時間を費やすことなく、次の入力行に進むことができます。
次の コマンドは効率的なコマンドを作成することが非常に重要であり、必要に応じていつでもスクリプトの実行を高速化するために使用できます。シリーズの次のパートの準備として、標準入力(STDIN) をAwk の入力として使用する方法を見ていきます。
このガイドが役立つことを願っています。また、いつものように、以下のコメント セクションにコメントを残して、自分の考えを書面に残すことができます。