読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

AWK:空行で区切られたファイルを処理する

AWK

ヘッダとフッタの削除

AWK 再評価の波を感じる。

AWK がどういう言語かは上記の 2 エントリで学んでもらうとして、最近ぼくが使った事例を紹介。

こんな感じでヘッダーとフッターがついてるテキストファイル abc.txt があるとして、

ヘッダ

a 1
b 2
c 3

フッタ

真ん中だけとりだして、

a 1
b 2
c 3

にしたい。

そのためには、下記のプログラムを l2.awk というファイル名で保存して*1

BEGIN { RS = "" ; FS = "\n"}
NR == 2

ターミナルに(ウィンドウズの場合はコマンドプロンプトに)

awk -f 'l2.awk' abc.txt > abc2.txt

と打ち込めばいい。

abc2.txt というファイルが作成され、中身は

a 1
b 2
c 3

になっているはずだ。

あるいはプログラムをわざわざ保存せずに、ターミナルに直接、

awk 'BEGIN { RS = "" ; FS = "\n"};NR == 2' abc.txt > abc2.txt

でもいい。

プログラムの解説

AWK はテキストファイルを 1 行ずつ読み込み、なんらかの処理を行う。

  • BEGIN:入力を読み込む前に実行される命令。
  • RS= "":入力時にレコードを区切る文字は規定値(空白やタブや改行)ですよ、という宣言。
  • FS= "\n":入力時にフィールドを区切る文字は \n (改行)ですよ、という宣言。
  • NR==2:処理しているレコードの先頭からの番号が 2 のところを抽出。

レコードは行列の「行」に近い概念、フィールドは表の「欄」に近い概念。

参考文献

プログラミング言語AWK

プログラミング言語AWK

↑ぼくが持ってるのはこっちだが、

プログラミング言語AWK

プログラミング言語AWK

  • 作者: A.V.エイホ,P.J.ワインバーガー,B.W.カーニハン,足立高徳
  • 出版社/メーカー: USP研究所
  • 発売日: 2010/01/01
  • メディア: 単行本(ソフトカバー)
  • クリック: 1回
  • この商品を含むブログを見る
↑新版はこっちらしい。

関連エントリ


AWK:csv ファイルから欠測値を取り出す - 廿TT

余談:AWK 用のエディタについて

AWK で長いプログラムはほとんど書かないし、ターミナルから呼べるのが便利なので nano エディタで間に合わせてます。

vim とか Emacs とか難しすぎて使えない。

あるいはUNIX系のハッカーの多くは、Emacsという異様なエディタを愛している。知らない人にはまったく使えない、無愛想きわまる代物で、みんながそれを好むのは、半分以上はそれが難しいからで、投入した勉強投資を否定したくないからだったりする。Emacsを嫌う人もいるけれど、その人たちはもっとひどくて、viという一般人には石器時代の異物としか思えないものをあがめ奉る始末


— コンピュータは、むずかしすぎて使えない!、2000年、翔泳社。著者:アラン・クーパー、訳者:山形浩生。p.472 訳者あとがき より

コンピュータは、むずかしすぎて使えない!

コンピュータは、むずかしすぎて使えない!

*1:実は拡張子はなんでもいい