Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWKへの愛を語る
Search
Satoru Takeuchi
PRO
August 24, 2024
Technology
3
620
AWKへの愛を語る
kanazawa.rb #144のLT資料です
https://meetup.kzrb.org/144/
Satoru Takeuchi
PRO
August 24, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
110
会社員しながら本を書いてきた知見の共有
sat
PRO
3
790
デバイスにアクセスするデバイスファイル
sat
PRO
1
38
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
32
デバイスドライバ
sat
PRO
0
49
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
120
共有メモリ
sat
PRO
3
71
マルチスレッドプログラム
sat
PRO
3
59
Linuxのブートプロセス initramfs編
sat
PRO
2
88
Other Decks in Technology
See All in Technology
AI時代の開発生産性を加速させるアーキテクチャ設計
plaidtech
PRO
3
160
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
260
fukabori.fm 出張版: 売上高617億円と高稼働率を陰で支えた社内ツール開発のあれこれ話 / 20250704 Yoshimasa Iwase & Tomoo Morikawa
shift_evolve
PRO
2
7.8k
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
7
5.3k
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
130k
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
210
改めてAWS WAFを振り返る~業務で使うためのポイント~
masakiokuda
2
260
What’s new in Android development tools
yanzm
0
310
B2C&B2B&社内向けサービスを抱える開発組織におけるサービス価値を最大化するイニシアチブ管理
belongadmin
1
7k
敢えて生成AIを使わないマネジメント業務
kzkmaeda
2
450
SEQUENCE object comparison - db tech showcase 2025 LT2
nori_shinoda
0
140
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
200
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
KATA
mclloyd
30
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Become a Pro
speakerdeck
PRO
29
5.4k
How to train your dragon (web standard)
notwaldorf
95
6.1k
Writing Fast Ruby
sferik
628
62k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Transcript
AWKへの愛を語る Aug. 24th, 2024 kanazawa.rb #144 Satoru Takeuchi X: satoru_takeuchi
1
はなすこと • プログラミング言語AWKへの私からの愛のメッセージを語る 2
はなすこと • プログラミング言語AWKへの私からの愛のメッセージを語る • アイスブレイク ◦ AWK知ってる人は挙手! 3
はなすこと • プログラミング言語AWKへの私からの愛のメッセージを語る • アイスブレイク ◦ AWK知ってる人は挙手! ◦ AWK使ったことある人は挙手! 4
AWKとは • 1977年にAT&Tベル研究所で生まれた ◦ もう強そうなニオイが漂っている • 手早くテキスト処理をするための言語 ◦ 基本は1行ごとにプログラムを適用して処理する ◦
詳しくは後述 5
サンプル入力 • 1行1レコード • フィールドはtabで区切っている • 第一フィールドがCPUベンダ、第二フィールドがプロセッサの名前 6 $ cat
input.txt amd ryzen intel pentium amd athlon transmeta crusoe intel core amd opteron
第1フィールドを出力 7 $ awk '{print $1}' input.txt amd intel amd
transmeta intel amd
第2フィールドを出力 8 $ awk '{print $2}' input.txt ryzen pentium athlon
crusoe core opteron
ベンダがIntelのプロセッサの数を出力 9 $ awk '$1=="intel"{sum++}END{print sum}' input.txt 2
それ、他の言語でもできるよ…? • 例: Rubyで第2フィールドを表示する場合 10 $ ruby -e 'ARGF.each do
|l| puts l.chomp().split("\t")[1] end' input.txt ryzen …
それ、他の言語でもできるよ…? • 例: Rubyで第2フィールドを表示する場合 • ちょっと長いかな…(個人の感想) ◦ AWK: 10文字 ◦
Ruby: 50文字 • 他の言語でも似たり寄ったり 11 $ ruby -e 'ARGF.each do |l| puts l.chomp().split("\t")[1] end' input.txt ryzen …
📝: RubyはAWKっぽく書ける構文もある • Rubyで第2フィールドを表示する場合 • オプションの説明 ◦ -n: 一行ごとに-eの後の引数を評価する ◦
-a: フィールドを自動的にいいかんじに分割して配列 $Fに入れる 12 $ ruby -nae 'puts $F[1]' input.txt ryzen pentium …
📝: RubyはAWKっぽく書ける構文もある • Rubyで第2フィールドを表示する場合 • オプションの説明 ◦ -n: 一行ごとに-eの後の引数を評価する ◦
-a: フィールドを自動的にいいかんじに分割して配列 $Fに入れる • プログラム(-eの引数)は10文字だがオプション含めると14文字 ◦ まだ脊髄で書けない (個人の感想) 13 $ ruby -nae 'puts $F[1]' input.txt ryzen pentium …
AWKの使いどころ • 1行1レコードのテキストを脊髄反射で処理したい場合 • 数行をひとまとめとしたレコードが繰り返されるテキスト処理もなんとか • それ以外は全部他の言語でいいと思う 14 name: foo
desc: bar name: hoge desc: huga
プログラミング言語AWK第二版に全てが書かれている • 言語作者達が書いた • 全機能を網羅 • 最新機能のUnicode,CSV対応もカバー • 作られた経緯、その後の発展についての記述も 15
まとめ • AWKというプログラミング言語がある • 古臭いけど便利 • ワンライナーを脊髄でプログラミングできる 16