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
580
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
Linuxのブートプロセス
sat
PRO
6
100
シェルのジョブ
sat
PRO
1
21
常駐サービスを実現するデーモンプロセス
sat
PRO
0
27
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
92
シェルのセッション
sat
PRO
2
33
RubyでKubernetesプログラミング
sat
PRO
4
190
プロセスの生成 exec編
sat
PRO
1
44
プロセスの生成 fork&exec編
sat
PRO
0
38
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
38
Other Decks in Technology
See All in Technology
書籍『入門 OpenTelemetry』 / Intro of OpenTelemetry book
ymotongpoo
9
620
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
9
4.4k
[OpsJAWS Meetup33 AIOps] Amazon Bedrockガードレールで守る安全なAI運用
akiratameto
1
150
2025/3/1 公共交通オープンデータデイ2025
morohoshi
0
130
早くて強い「リアルタイム解析基盤」から広げるマルチドメイン&プロダクト開発
plaidtech
PRO
1
160
IAMのマニアックな話2025
nrinetcom
PRO
6
1.6k
開発者体験を定量的に把握する手法と活用事例
ham0215
0
160
AIエージェント開発のノウハウと課題
pharma_x_tech
10
5.8k
エンジニア主導の企画立案を可能にする組織とは?
recruitengineers
PRO
1
350
アジリティを高めるテストマネジメント #QiitaQualityForward
makky_tyuyan
1
550
Real World Nix CI/CD編
asa1984
1
150
How to benefit from the latest Keycloak features
ahus1
0
100
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Scaling GitHub
holman
459
140k
Writing Fast Ruby
sferik
628
61k
GitHub's CSS Performance
jonrohan
1030
460k
Optimizing for Happiness
mojombo
377
70k
Code Review Best Practice
trishagee
67
18k
Done Done
chrislema
182
16k
RailsConf 2023
tenderlove
29
1k
A designer walks into a library…
pauljervisheath
205
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.6k
The Cost Of JavaScript in 2023
addyosmani
47
7.5k
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