ウェブサイト検索

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


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

Awk は、提供された入力行を自動的にフィールドに分割し、フィールドは内部フィールド区切り記号によって他のフィールドから分離された文字のセットとして定義できることを知っておくと便利です。

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

これは、Awk でフィールド分離の考え方がどのように機能するかです。入力行に遭遇すると、定義された IFS に従って、最初の文字セットがフィールド 1 となり、$1< を使用してアクセスされます。、2 番目の文字セットはフィールド 2 で、$2 を使用してアクセスされます。3 番目の文字セットはフィールド 3 で、$3 を使用してアクセスされます。最後の文字セットまで。

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

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

vi tecmintinfo.txt
cat tecmintinfo.txt

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

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

TecMint.comisthe

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

  1. フィールド 1 の 「TecMint.com 」 には、$1 を使用してアクセスします。
  2. 「is 」 であるフィールド 2 には、$2 を使用してアクセスします。
  3. フィールド 3 は 「the 」 であり、$3 を使用してアクセスします。

印刷出力でお気づきかと思いますが、フィールド値は分離されておらず、これがデフォルトでの印刷の動作です。

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

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

TecMint.com is the

注意すべき重要な点の 1 つは、Awk での ($) の使用はシェル スクリプトでの使用とは異なるということです。

シェル スクリプトでは ($) は変数の値にアクセスするために使用されますが、Awk では ($) は変数の内容にアクセスする場合にのみ使用されます。フィールドですが、変数の値にアクセスするためのものではありません。

例 2: my_shoping.list という複数の行が含まれるファイルを使用した別の例を見てみましょう。

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_NameUnit_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 での ($) 演算子の使用はシェル スクリプトでの使用とは異なることを常に覚えておいてください。

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