Slide 1

Slide 1 text

AWKへの愛を語る Aug. 24th, 2024 kanazawa.rb #144 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はなすこと ● プログラミング言語AWKへの私からの愛のメッセージを語る 2

Slide 3

Slide 3 text

はなすこと ● プログラミング言語AWKへの私からの愛のメッセージを語る ● アイスブレイク ○ AWK知ってる人は挙手! 3

Slide 4

Slide 4 text

はなすこと ● プログラミング言語AWKへの私からの愛のメッセージを語る ● アイスブレイク ○ AWK知ってる人は挙手! ○ AWK使ったことある人は挙手! 4

Slide 5

Slide 5 text

AWKとは ● 1977年にAT&Tベル研究所で生まれた ○ もう強そうなニオイが漂っている ● 手早くテキスト処理をするための言語 ○ 基本は1行ごとにプログラムを適用して処理する ○ 詳しくは後述 5

Slide 6

Slide 6 text

サンプル入力 ● 1行1レコード ● フィールドはtabで区切っている ● 第一フィールドがCPUベンダ、第二フィールドがプロセッサの名前 6 $ cat input.txt amd ryzen intel pentium amd athlon transmeta crusoe intel core amd opteron

Slide 7

Slide 7 text

第1フィールドを出力 7 $ awk '{print $1}' input.txt amd intel amd transmeta intel amd

Slide 8

Slide 8 text

第2フィールドを出力 8 $ awk '{print $2}' input.txt ryzen pentium athlon crusoe core opteron

Slide 9

Slide 9 text

ベンダがIntelのプロセッサの数を出力 9 $ awk '$1=="intel"{sum++}END{print sum}' input.txt 2

Slide 10

Slide 10 text

それ、他の言語でもできるよ…? ● 例: Rubyで第2フィールドを表示する場合 10 $ ruby -e 'ARGF.each do |l| puts l.chomp().split("\t")[1] end' input.txt ryzen …

Slide 11

Slide 11 text

それ、他の言語でもできるよ…? ● 例: Rubyで第2フィールドを表示する場合 ● ちょっと長いかな…(個人の感想) ○ AWK: 10文字 ○ Ruby: 50文字 ● 他の言語でも似たり寄ったり 11 $ ruby -e 'ARGF.each do |l| puts l.chomp().split("\t")[1] end' input.txt ryzen …

Slide 12

Slide 12 text

📝: RubyはAWKっぽく書ける構文もある ● Rubyで第2フィールドを表示する場合 ● オプションの説明 ○ -n: 一行ごとに-eの後の引数を評価する ○ -a: フィールドを自動的にいいかんじに分割して配列 $Fに入れる 12 $ ruby -nae 'puts $F[1]' input.txt ryzen pentium …

Slide 13

Slide 13 text

📝: RubyはAWKっぽく書ける構文もある ● Rubyで第2フィールドを表示する場合 ● オプションの説明 ○ -n: 一行ごとに-eの後の引数を評価する ○ -a: フィールドを自動的にいいかんじに分割して配列 $Fに入れる ● プログラム(-eの引数)は10文字だがオプション含めると14文字 ○ まだ脊髄で書けない (個人の感想) 13 $ ruby -nae 'puts $F[1]' input.txt ryzen pentium …

Slide 14

Slide 14 text

AWKの使いどころ ● 1行1レコードのテキストを脊髄反射で処理したい場合 ● 数行をひとまとめとしたレコードが繰り返されるテキスト処理もなんとか ● それ以外は全部他の言語でいいと思う 14 name: foo desc: bar name: hoge desc: huga

Slide 15

Slide 15 text

プログラミング言語AWK第二版に全てが書かれている ● 言語作者達が書いた ● 全機能を網羅 ● 最新機能のUnicode,CSV対応もカバー ● 作られた経緯、その後の発展についての記述も 15

Slide 16

Slide 16 text

まとめ ● AWKというプログラミング言語がある ● 古臭いけど便利 ● ワンライナーを脊髄でプログラミングできる 16