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
460
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
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
26
動作中のLinux環境の全メモリを見る
sat
PRO
1
51
Linuxの時間を10秒止める
sat
PRO
2
180
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
71
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
46
プロセスへのメモリ割り当て(1) mmap
sat
PRO
2
93
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
sat
PRO
1
82
サイボウズのOSPO
sat
PRO
3
280
無いはずのパーティションがある Phantom Atari Partition
sat
PRO
1
69
Other Decks in Technology
See All in Technology
すぐに始めるAWSコスト削減。短期でできる改善策と長期的な運用負荷軽減への取り組み方を解説
ncdc
1
540
突撃! 隣のAmazon Bedrockユーザー 〜YouはどうしてAWSで?〜
minorun365
PRO
3
280
分野に潜むツールの紹介
pojiro
1
360
SAVEPOINT α版
savepoint
0
570
技術ブログや登壇資料を秒で作るコツ伝授します
minorun365
PRO
23
5.3k
LandingZoneAccelerator と学ぶ 「スケーラブルで安全なマルチアカウントAWS環境」と 私たちにもできるベストプラクティス
maimyyym
1
120
自社サービスのための独自リリース版Redmine「RedMica」の取り組み
vividtone
0
1.1k
JEP 480: Structured Concurrency
aya_ebata
0
100
CRTO/CRTL/OSEPの比較・勉強法とAV/EDRの検知実験
chayakonanaika
1
1k
より快適なエラーログ監視を目指して
leveragestech
3
890
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
170
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
110
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
27
8.9k
Thoughts on Productivity
jonyablonski
66
4.2k
How to Ace a Technical Interview
jacobian
275
23k
Fireside Chat
paigeccino
31
2.9k
Embracing the Ebb and Flow
colly
83
4.4k
How To Stay Up To Date on Web Technology
chriscoyier
786
250k
Teambox: Starting and Learning
jrom
131
8.7k
Building Your Own Lightsaber
phodgson
101
6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
190
16k
Optimising Largest Contentful Paint
csswizardry
29
2.8k
4 Signs Your Business is Dying
shpigford
179
21k
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