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

上記のコマンドは実際には次のように機能します。

  1. First, it checks whether the quantity, fourth field of each input line is less than or equal to 20, if a value meets that condition, it is printed and flagged with the (*) sign at the end using expression one: $4 <= 20
  2. Secondly, it checks if the fourth field of each input line is greater than 20, and if a line meets the condition it gets printed using expression two: $4 > 20

ただし、ここで1つの問題があります。最初の式が実行されると、フラグを立てたい行が次のように出力されます。 {printf%st%sn、sh、**; } 次に、同じステップで、時間の浪費要因となる2番目の式もチェックされます。

したがって、最初の式を使用して印刷されたフラグ付きの行を印刷した後、2番目の式> 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

{printf%st%sn、sh、*;を使用して単一の入力行が出力された後。次 ; } 、含まれている next コマンドは、2番目の式> 20 {print sh;} をスキップするのに役立つため、実行は数量が20より大きいかどうかを確認するために時間を無駄にすることなく、次の入力行。

次のコマンドは非常に重要です。効率的なコマンドを作成することです。必要に応じて、いつでもスクリプトの実行を高速化できます。 Awkの入力として標準入力(STDIN)を使用する方法を検討する、シリーズの次のパートの準備をします。

このガイドの方法がお役に立てば幸いです。下のコメントセクションにコメントを残すことで、いつものように自分の考えを書面で書くことができます。