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
470
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
74
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
47
プロセスへのメモリ割り当て(1) mmap
sat
PRO
2
95
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
sat
PRO
1
85
サイボウズのOSPO
sat
PRO
3
280
無いはずのパーティションがある Phantom Atari Partition
sat
PRO
1
70
Other Decks in Technology
See All in Technology
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
13k
社内の学びの場・コミュニティ形成とエンジニア同士のリレーションシップ構築/devreljapan2024
nishiuma
3
270
Swift Testingのconfirmationを コードリーディング/Dive into Swift Testing confirmation
laprasdrum
1
240
不動産売買取引におけるAIの可能性とプロダクトでのAI活用
zabio3
0
260
Google CloudのLLM活用の選択肢を広げるVertex AIのパートナーモデル
nayuts
0
120
React Aria で実現する次世代のアクセシビリティ
ryo_manba
4
1.2k
サプライチェーン攻撃に備える
ryunen344
0
190
Jetpack Compose Modifier 徹底解説 / Jetpack Compose Modifier
wiroha
0
160
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
120
Privacy Sandbox on Android / DroidKaigi 2024
7pairs
1
210
contenteditableと向き合う
kikuchikakeru
2
300
自作Cコンパイラ 8時間の奮闘
soukouki
0
820
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
38
9.2k
A Modern Web Designer's Workflow
chriscoyier
691
190k
How To Stay Up To Date on Web Technology
chriscoyier
786
250k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Building a Modern Day E-commerce SEO Strategy
aleyda
36
6.8k
Become a Pro
speakerdeck
PRO
22
4.9k
Designing the Hi-DPI Web
ddemaree
278
34k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Mobile First: as difficult as doing things right
swwweet
221
8.8k
Rails Girls Zürich Keynote
gr2m
93
13k
Code Reviewing Like a Champion
maltzj
517
39k
[RailsConf 2023] Rails as a piece of cake
palkan
48
4.6k
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