Awkを使用してファイルのフィールドと列を印刷する方法


Linux Awkコマンドシリーズのこのパートでは、フィールド編集であるAwkの最も重要な機能の1つを見ていきます。

Awkは、提供された入力行をフィールドに自動的に分割し、フィールドは、内部フィールドセパレーターによって他のフィールドから分離された文字のセットとして定義できることを知っておくとよいでしょう。

Unix/Linuxに精通している場合、またはbashシェルプログラミングを行う場合は、内部フィールドセパレータ(IFS)変数が何であるかを知っている必要があります。 AwkのデフォルトのIFSはタブとスペースです。

これがAwkでのフィールド分離の考え方の仕組みです。定義されたIFSによると、入力行に遭遇すると、最初の文字セットはフィールド1であり、を使用してアクセスされます。2番目の文字セットはフィールド2であり、を使用してアクセスする場合、3番目の文字セットはフィールド3であり、最後の文字セットまでを使用してアクセスします。

このAwkフィールド編集をよりよく理解するために、以下の例を見てみましょう。

例1:tecmintinfo.txtというテキストファイルを作成しました。

# vi tecmintinfo.txt
# cat tecmintinfo.txt

次に、コマンドラインから、次のコマンドを使用して、ファイルtecmintinfo.txtの1番目、2番目、および3番目のフィールドを出力しようとします。

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

上記の出力から、最初の3つのフィールドの文字が、スペースである定義済みのIFSに基づいて印刷されていることがわかります。

  1. Field one which is “TecMint.com” is accessed using $1.
  2. Field two which is “is” is accessed using $2.
  3. Field three which is “the” is accessed using $3.

印刷出力で気付いた場合、フィールド値は分離されておらず、これがデフォルトでの印刷の動作です。

フィールド値の間にスペースを入れて出力を明確に表示するには、次のように(、)演算子を追加する必要があります。

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

注意して常に覚えておくべき重要なことの1つは、Awkでの($)の使用は、シェルスクリプトでの使用とは異なるということです。

シェルスクリプトでは、($)は変数の値にアクセスするために使用されますが、Awk ($)では、フィールドのコンテンツにアクセスする場合にのみ使用され、変数の値。

例2:my_shoping.listという複数の行を含むファイルを使用したもう1つの例を見てみましょう。

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

ショッピングリストの各アイテムの Unit_Price のみを印刷したい場合は、次のコマンドを実行する必要があります。

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awkには printf コマンドもあり、上記の出力が十分に明確でないことがわかるので、出力をフォーマットするのに役立ちます。

printf を使用してItem_NameとUnit_Priceの出力をフォーマットします。

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

概要

Awkを使用してテキストや文字列をフィルタリングする場合、フィールド編集は非常に重要です。これは、リストの列で特定のデータを取得するのに役立ちます。また、Awkでの($)演算子の使用は、シェルスクリプトでの使用とは異なることを常に覚えておいてください。

この記事がお役に立てば幸いです。必要な追加情報や質問については、コメントセクションにコメントを投稿してください。