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

オーク

1.3千文字の記事
  • twitter
  • facebook
  • はてな
  • LINE

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

関連商品

 

関連コミュニティ

関連項目

この記事を編集する

掲示板

おすすめトレンド

急上昇ワード改

最終更新:2024/03/28(木) 21:00

ほめられた記事

最終更新:2024/03/28(木) 21:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP