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

オーク
  • 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
スマホ版URL:
https://dic.nicovideo.jp/t/a/awk%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%29

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

お絵カキコがありません

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

ピコカキコがありません

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

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

急上昇ワード

おすすめトレンド