Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
知って得するかもしれない テキスト処理理コマンドのお話 @serima
Slide 2
Slide 2 text
⾃自⼰己紹介 | PHP歴 今年年で 8 年年⽬目 初めての PHP 勉強会への参加 今後も頑張りたい
Slide 3
Slide 3 text
ビッグデータと僕 ソーシャルゲームの運⽤用 データ命 アクセスログ、課⾦金金ログ、戦闘ロ グ、カード取得ログ…
Slide 4
Slide 4 text
データのダンプ mysqldump scp
Slide 5
Slide 5 text
TreasureData あらゆるログを TreasureData に集 約 これで取り出しやすくはなった
Slide 6
Slide 6 text
ディレクターさん 「せりまさん、こんなデータ取って ください」 「おk」
Slide 7
Slide 7 text
巨⼤大なデータ いざ取り出してみると、数⼗十万〜~数 百万⾏行行になることはザラ この規模のデータを Excel で開くと 死亡 なので、ある程度度サマリする必要が でてきます
Slide 8
Slide 8 text
サマリするためのスクリプト データ規模が⼤大きくなってくると PHP つかって書くと超遅い
Slide 9
Slide 9 text
それ… UNIX コマンドでできるよ
Slide 10
Slide 10 text
よく使うコマンド cat, sort, uniq, wc, grep, awk, diff, cut, sed
Slide 11
Slide 11 text
join ふたつのファイルの共通 key で連結 ふたつのファイルは結合するフィー ルドで sort しておく必要がある
Slide 12
Slide 12 text
join の使⽤用例例 a.txt には ユーザ ID, 課⾦金金額, 戦闘⼒力力 の順で⼊入ってる b.txt には ユーザ ID, ユーザ名 の順で⼊入ってる join -‐‑‒a1 -‐‑‒eʼ’-‐‑‒ʼ’ -‐‑‒oʼ’0 1.2 1.3 2.2ʼ’ <(sort a.txt) <(sort b.txt)
Slide 13
Slide 13 text
プロセス置換 | 知ってる? <(sort a.txt) bash や zsh の機能 sort 済みのテンポラリファイルを作 る必要がなくなる
Slide 14
Slide 14 text
プロセス置換 | 知らない これを知るまで cat a.txt | sort > a_̲sorted.txt 無駄なファイル量量産してた
Slide 15
Slide 15 text
集合演算っぽいこと A に含まれるが、B に含まれない ID を出したい 1 2 3 1 3 2 A B ほしい結果
Slide 16
Slide 16 text
差集合 diff と awk でできるよ diff <(sort A) <(sort B) | awk ʻ‘/^
Slide 17
Slide 17 text
他の集合演算 和集合 A∪B cat A B | sort | uniq 積集合 A∩B cat A B | sort | uniq -‐‑‒d join A B
Slide 18
Slide 18 text
join コマンド join コマンドはとても便便利利だけど、 ふたつの引数しかとることができな い
Slide 19
Slide 19 text
tsv や csv に query 投げたい あるんです q -‐‑‒ Text as Data https://github.com/harelba/q q って!ググラビリティ低すぎ
Slide 20
Slide 20 text
試しに使ってみる % seq 1 1000 | q "select avg(c1),sum(c1) from -‐‑‒" 500.5 500500 c1というのが、カラムの1番⽬目という意味なので、 avg(c1)で、1〜~1000の総和の平均 sum(c1)で、1〜~1000の総和 がちゃんと出てますね
Slide 21
Slide 21 text
GROUP BY も使える % cat test.txt Mike 10 John 1 Bob 8 Mary 19 Bob 15 Bob 20 Mike 2 % q "select c1, count(*), sum(c2) from test.txt group by c1" Bob 3 43 John 1 1 Mary 1 19 Mike 2 12
Slide 22
Slide 22 text
JOIN も使える % cat test1.txt a1234 aa1 b1234 aa2 c1234 aa3 d1234 aa3 ! % cat test2.txt 1 a1234 bb1 2 a1234 bb2 3 b1234 cc1 4 c1234 dd3 5 e1234 NULL ! % q "select * from test1.txt as a left join test2.txt as b on a.c1 = b.c2" a1234 aa1 1 a1234 bb1 a1234 aa1 2 a1234 bb2 b1234 aa2 3 b1234 cc1 c1234 aa3 4 c1234 dd3 d1234 aa3
Slide 23
Slide 23 text
ご清聴ありがとうございました ブログにこの事書いてるのでご興味 あればどうぞ http://serima.co/blog