awk(プログラミング言語)単語

オーク
1.3千文字の記事
  • 3
  • 0pt
掲示板へ

awkとは、UNIXフィルタコマンドであり、プログラミング言語でもある。

概要

UNIXというOSは、小さく簡単なプログラムを組み合わせて複雑な処理を行うという考え方で実装されている。このような入力を加工して出力するプログラムを特にフィルタと呼び、それを組み合わせる機の一つをパイプと言う。

行を抽出するコマンドgrepや、ラインエディタedをストリーミング処理に向きにしたsedより、さらに複雑な処理を行えるようにプログラミングとしたものがawkである。処理できるのはテキストファイルのみで、バイナリファイルは扱えない。sedawkのいいとこ取りをしバイナリファイルを扱えるようにして生まれたのがPerlである。

コマンド名は作成者である、エイホ、ワインバーガー、カーハン頭文字を取って付けられた。

特徴は、一行の文字列を区切り文字で簡単に分割して扱えること、連想配列が扱えること。文法はC言語に似ている。後にawkを改良したnawk(new awk)が開発され、現在ではgawk(GNU awk)など他の実装もある。

商用UNIXOSは、素の状態ではCコンパイラインストールされてないこともあるので、テキストファイルについてはawkでチョイチョイと急場をしのぐことも多々ある。

gawkでは3.1からTCP/IPでの通信もできるようになった。

xgawkという、gawkに以下の機を追加したGNUとは別のバージョン開発中である。

など。

プログラムの例

プログラムの例1

以下のスクリプトhoge.awkで保存し、

{print $1}

以下のように実行すると、passwdファイルにあるログイン名だけを出力する。"-F:"は区切り文字を":"にするオプション

awk -F: -f hoge.awk /etc/passwd

コマンドラインで直接プログラムを書くこともできる。

awk -F: '{print $1 }' /etc/passwd

プログラムの例2

フィルタとしての処理の前後に特別な処理を記述することができる。変数の初期化や結果の表示に利用できる。
行のカウントをしてみる。

BEGIN{
i = 0
}
{
i ++
}
END{
print i
}

プログラムの例3

BEGINだけを使って普通プログラミングっぽく。古いawkでは実行不可。

BEGIN{
i=0
while( i < 10 ) {
print i
i++
}
}

プログラムの例4

フィルタコマンドパイプでつないでみる。ファイルpiyo中に出現する単語のうち数の多いものを10個表示。英語のように単語が空白で区切られているもののみ。適当だけど。

awk '{for(i=1;i<=NF;i++){print $i}}' piyo | sort | uniq -c | sort -nr | head

関連項目

【スポンサーリンク】

  • 3
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

awk(プログラミング言語)

1 ななしのよっしん
2014/01/13(月) 15:54:44 ID: oukaEJUSAZ
大量のテキストログを編集するときにどうしようか悩んでるときに見つけた。スゴイフィルタです
👍
高評価
0
👎
低評価
0

ニコニコニューストピックス