(有)未来検索ブラジルが運営するあらゆる言葉についての記事を閲覧・編集したり、コメントをしたりするサイトです。

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

編集

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

関連商品

 

関連コミュニティ

関連項目

携帯版URL:
http://dic.nicomoba.jp/k/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
ページ番号: 730584 リビジョン番号: 124378
読み:オーク
初版作成日: 08/11/20 19:54 ◆ 最終更新日: 08/11/26 21:22
編集内容についての説明/コメント: 例4に説明追加。
記事編集 / 編集履歴を閲覧 /

awk(プログラミング言語)について語るスレ


まだ掲示板に書き込みがありません… 以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • awk(プログラミング言語)についての雑談(ダラダラとゆるい感じで)

書き込みを行うには、ニコニコ動画のアカウントが必要です!


ページトップへ戻る