Linux awkコマンド

1.awkとは
 awk(オーク)はスクリプト・インタプリタで、空白などで区切られたテキストの処理、演算機能もあるプログラミング言語であるが、Linuxのコマンドのように扱うことができる。

2.動作環境
ここでの実行環境は次の通り。
・VirtualBox Ubuntu 16.04.7 LTS
・awkのバージョン
 $ awk -W version
 mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
 compiled limits:
 max NF 32767
 sprintf buffer 2040

3.awkの基本
3.1 awkの基本構文
(1)awkコマンドの書式
 awk [オプション] [コマンド] [ファイルのパス]
 ・awkの主なオプション
 -f ファイル名 awkスクリプトが書かれたファイルを指定する
 -F 区切り文字 区切り文字を指定する(デフォルトは空白文字)
 -v 変数名=値 変数を定義する

 awkはテキストファイルをレコード(行)ごとに処理を行い、フィールド(列)に対する処理を記述する。フィールド(列)に関しては下記の組み込み変数で指定する。
 ・組み込み変数
  $1, $2, …, $n, … : 第n列目のデータ
  NF: フィールド(列)の数(1からスタート)
  NR: 行番号(1からスタート)

(2)awkコマンドの使い方
 コマンドはパターンとアクションに分けて、”awk ‘パターン {アクション}’ [ファイルのパス]”で、テキストファイルを1行ずつ読み、パターンに合致した行に対して、アクションで指定された内容を実行する。
 パターンを指定しないで”awk ‘{アクション}’ [ファイルのパス]”としたときは全ての行が処理の対象となる。

 (例)data.txtのファイルの内容を表示する
 data.txt

・$0を使用することで全てのフィールド(列)を参照。
 $ awk ‘{print $0}’ ./data.txt
 1 apple
 2 orange
 3 Grape
・$1を使用することでフィールド1(列1)を参照。
 $ awk ‘{print $1}’ data.txt
 1
 2
 3
・$1 $2を使用することでフィールド1(列1)とフィールド2(列2)を参照。
 $ awk ‘{print $1 $2}’ ./data.txt
 1apple
 2orange
 3Grape
・$1と$2の間に文字を挿入
 $ awk ‘{print $1 “/” $2}’ ./data.txt
 1/apple
 2/orange
 3/Grape
・フィールド1(列1)とフィールド2(列2)を”,”で区切った場合(デフォルトはスペース区切り)-Fオプション
 data.txt

$ awk -F , ‘{print $1 $2}’ ./data.txt
 1apple
 2orange
 3Grape
・’コマンド’に「パターン」を含むとき
 awk ‘パターン { アクション }’ [ 入力ファイルのパス ]
 awk ‘$1==1 {print $1, $2}’ ./data.txt
 1 apple
(3)パターンの組み合わせ
 パターン1 && パターン2:パターン1とパターン2の両方に合致
 $ awk ‘$1==1 && $2==”apple” {print $1, $2}’ ./data.txt
 1 apple

 パターン1 || パターン2:パターン1またはパターン2に合致
 $ awk ‘$1==1 || $1==2 {print $1, $2}’ ./data.txt
 1 apple
 2 orange
(4)BEGIN(前処理)とEND(後処理)
テキストの処理を開始する前に実行したい処理がある場合は”BEGIN {アクション}”で指定し、最終行の処理の後の処理は”END {アクション}”で指定する。
 $ awk ‘BEGIN{ i=0 } {print ++i,$0 } END{ print i,” 行” }’ ./data.txt
 1 1 apple
 2 2 orange
 3 3 Grape
 3 行
(5)awk用のファイルで処理(-fオプション)
 (4)項のコマンドをファイルにする
  sample1.awk

実行
  $ awk -f sample1.awk ./data.txt
  1 1 apple
  2 2 orange
  3 3 Grape
  3 行
(6)スクリプトとして実行する
 (5)項で作成したawk用のファイルの1行目に”#! /usr/bin/awk -f”を書く

 スクリプトファイルの実行権限を設定する
 $ chmod +x sample1.awk
 $ ./sample1.awk ./data.txt
 1 1 apple
 2 2 orange
 3 3 Grape
 3 行

3.2 C言語のプログラムからawkスクリプトファイルを実行
・data.txt

・sample1.awk

・awk_test.c

・awk_test.cをコンパイルし、実行
 Linux の system 関数はプログラムの起動に成功すると0を返し、失敗すると-1を返す。
 $ gcc -o awk_test awk_test.c
 $ ./awk_test
 1 1,apple
 2 2,orange
 3 3,Grape
 3 行
 system()戻り値:0

The end