SlideShare a Scribd company logo
1 of 23
Download to read offline
知って得するかもしれない
テキスト処理理コマンドのお話
@serima
⾃自⼰己紹介  |  PHP歴
今年年で  8  年年⽬目  
初めての  PHP  勉強会への参加  
今後も頑張りたい
ビッグデータと僕
ソーシャルゲームの運⽤用  
データ命  
アクセスログ、課⾦金金ログ、戦闘ロ
グ、カード取得ログ…
データのダンプ
mysqldump  
scp
TreasureData
あらゆるログを  TreasureData  に集
約  
これで取り出しやすくはなった
ディレクターさん
「せりまさん、こんなデータ取って
ください」  
「おk」
巨⼤大なデータ
いざ取り出してみると、数⼗十万〜~数
百万⾏行行になることはザラ  
この規模のデータを  Excel  で開くと
死亡  
なので、ある程度度サマリする必要が
でてきます
サマリするためのスクリプト
データ規模が⼤大きくなってくると
PHP  つかって書くと超遅い
それ…
UNIX  コマンドでできるよ
よく使うコマンド
cat,  sort,  uniq,  wc,  grep,  awk,  
diff,  cut,  sed
join
ふたつのファイルの共通  key  で連結  
ふたつのファイルは結合するフィー
ルドで  sort  しておく必要がある
join  の使⽤用例例
a.txt  には  ユーザ  ID,  課⾦金金額,  戦闘⼒力力  の順で⼊入ってる  
b.txt  には  ユーザ  ID,  ユーザ名  の順で⼊入ってる  
join  -‐‑‒a1  -‐‑‒eʼ’-‐‑‒ʼ’  -‐‑‒oʼ’0  1.2  1.3  2.2ʼ’  <(sort  a.txt)  <(sort  b.txt)
プロセス置換  |  知ってる?
<(sort  a.txt)  
bash  や  zsh  の機能  
sort  済みのテンポラリファイルを作
る必要がなくなる
プロセス置換  |  知らない
これを知るまで  
cat  a.txt  |  sort  >  a_̲sorted.txt  
無駄なファイル量量産してた
集合演算っぽいこと
A  に含まれるが、B  に含まれない  ID  
を出したい
1  
2  
3
1  
3
2
A B ほしい結果
差集合
diff  と  awk  でできるよ
diff  <(sort  A)  <(sort  B)  |  awk  ʻ‘/^</{print  $2}ʼ’
他の集合演算
和集合  A∪B  
cat  A  B  |  sort  |  uniq  
積集合  A∩B  
cat  A  B  |  sort  |  uniq  -‐‑‒d  
join  A  B
join  コマンド
join  コマンドはとても便便利利だけど、
ふたつの引数しかとることができな
い
tsv  や  csv  に  query  投げたい
あるんです  
q  -‐‑‒  Text  as  Data  
https://github.com/harelba/q  
q  って!ググラビリティ低すぎ
試しに使ってみる
%  seq  1  1000  |  q  "select  avg(c1),sum(c1)  from  -‐‑‒"  
500.5  500500
c1というのが、カラムの1番⽬目という意味なので、  
avg(c1)で、1〜~1000の総和の平均  
sum(c1)で、1〜~1000の総和  
がちゃんと出てますね
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
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
ご清聴ありがとうございました
ブログにこの事書いてるのでご興味
あればどうぞ  
http://serima.co/blog

More Related Content

What's hot (6)

20151118卒研進捗LT
20151118卒研進捗LT20151118卒研進捗LT
20151118卒研進捗LT
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
 
Webスライスから始めるmicroformats
Webスライスから始めるmicroformatsWebスライスから始めるmicroformats
Webスライスから始めるmicroformats
 
XML Http Request Level2 の噂を聞いたので調べてみた
XML Http Request Level2 の噂を聞いたので調べてみたXML Http Request Level2 の噂を聞いたので調べてみた
XML Http Request Level2 の噂を聞いたので調べてみた
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回
 
第四回 #渋谷java オープニング
第四回 #渋谷java オープニング第四回 #渋谷java オープニング
第四回 #渋谷java オープニング
 

Viewers also liked

Viewers also liked (11)

Carbon と Chronos から見る OSS 運営
Carbon と Chronos から見る OSS 運営Carbon と Chronos から見る OSS 運営
Carbon と Chronos から見る OSS 運営
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
 
ElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチするElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチする
 
WordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPSWordPress on PHP7 on CentOS7 on Saraku-VPS
WordPress on PHP7 on CentOS7 on Saraku-VPS
 
Security Advisories Checker on Travis/Circle CI
Security Advisories Checker on Travis/Circle CISecurity Advisories Checker on Travis/Circle CI
Security Advisories Checker on Travis/Circle CI
 
Ansible+Docker
Ansible+DockerAnsible+Docker
Ansible+Docker
 
Introducing company
Introducing companyIntroducing company
Introducing company
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
 
アルゴリズム取引のシステムを開発・運用してみて分かったこと
アルゴリズム取引のシステムを開発・運用してみて分かったことアルゴリズム取引のシステムを開発・運用してみて分かったこと
アルゴリズム取引のシステムを開発・運用してみて分かったこと
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 

Similar to 第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話

Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
 

Similar to 第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話 (9)

Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回
 
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
 
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 

More from Ryo Shibayama

More from Ryo Shibayama (11)

倒れても進捗
倒れても進捗倒れても進捗
倒れても進捗
 
CircleCI 導入への入門
CircleCI 導入への入門CircleCI 導入への入門
CircleCI 導入への入門
 
エンジニア採用と PHP #phpconfuk_rej
エンジニア採用と PHP #phpconfuk_rejエンジニア採用と PHP #phpconfuk_rej
エンジニア採用と PHP #phpconfuk_rej
 
Start OSS Contribution With What You Know / できることから始める OSS Contribution
Start OSS Contribution With What You Know / できることから始める OSS ContributionStart OSS Contribution With What You Know / できることから始める OSS Contribution
Start OSS Contribution With What You Know / できることから始める OSS Contribution
 
チームから気軽に始めるピアボーナス
チームから気軽に始めるピアボーナスチームから気軽に始めるピアボーナス
チームから気軽に始めるピアボーナス
 
ソフトウェアエンジニアとしてのワークアズライフ
ソフトウェアエンジニアとしてのワークアズライフソフトウェアエンジニアとしてのワークアズライフ
ソフトウェアエンジニアとしてのワークアズライフ
 
Try to use chromeless on AWS Lambda
Try to use chromeless on AWS LambdaTry to use chromeless on AWS Lambda
Try to use chromeless on AWS Lambda
 
CircleCI 2.0 でビルド時間を大幅に短縮する
CircleCI 2.0 でビルド時間を大幅に短縮するCircleCI 2.0 でビルド時間を大幅に短縮する
CircleCI 2.0 でビルド時間を大幅に短縮する
 
OSS Contribution through CircleCI 2.0
OSS Contribution through CircleCI 2.0OSS Contribution through CircleCI 2.0
OSS Contribution through CircleCI 2.0
 
PHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみるPHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみる
 
Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断
 

第87回PHP勉強会 LT 知って得するかもしれないテキスト処理コマンドのお話