Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
シェル芸で使いたくて
LINQが使えるコマンド作ったら
awkでよかった話
たいちょー
みなさん#!/bin/bash(こんにちはの意)
たいちょー
Twitter : @xztaityozx_001
OITの4年生
/bin/bash在住
母語はC#
アイコンステッカーあります
LINQ #とは
LinQは日本の福岡県福岡市を拠点に活動
しているローカルアイドルグループ
--Wikipediaより
今回は残念ながらこっちではないです
.NET framework の方の LINQ
DBやXMLのようなデータだけでなく
あらゆる情報ソースに適用できるクエリ
DBにアクセスする感じでデータ構造を
操作できる
LINQの例
int[] A = new int[]{1,2,3, … ,10};
var B = A.Where(x=>x%2==0);
// B = {2,4,6,8,10}
var C =
A.Where(x=>x%2==1).Selec...
うわっめちゃ強力じゃん
すごいぞLINQ
.NETの加護を受けているC#やVBや
Powerシェル芸のつよみ
こういうの
僕は
何かシェル芸をやってるときに
と思います
思いませんか??
ツールを探す
多分無い
ggりパワーが低いだけかもしれない
いろいろggってたら自分のブログが出て
きて恥ずかしかった
無いなら作ればいいじゃない
作ってしまった
ShelLINQ って言います
https://github.com/xztaityozx/shellinq
カッコいいロゴも作りました
ShelLINQの使い方
shellinq [TYPEs] [method query]
… [-o [FORMAT]]
EX) 偶数取り出す
seq 1 30|shellinq where 'x=>x%2==0'
↑C#のラムダ
ぎっと...
awkみたいにクエリが書ける
EX) 偶数取り出す
seq 1 30|shellinq where 'x=>x%2==0'
↓
seq 1 30|shellinq where '$1%2==0'
$0は全カラムを出力する
メソッドチェーンもできる
seq 1 30|shellinq
where '$1%2==0'
select '$1+$1'
カラムが複数でもいける
ls -l |sed '1d'|
shellinq select '$1'
どんな実装か
C#のソースコードを吐き出しているだけ
それをmcsに通してビルド
monoを使って実行
シェル芸の定義に従ってソースはrmする
入力の1行目を使って型推論()している
VS awk
awkとバトルします
発表タイトルから結果が見えてますが
お付き合いください
対決内容
書きやすさは個人差があるので
1~1,000,000までのFizzBuzzの実行時間
timeコマンドを使って測定
環境はUbuntu 16.04
赤コーナー
awk
seq 1 1000000|awk
‘{if(NR%15==0){print
“FizzBuzz”}else if(NR%5==0){print
“Fizz”}else if(NR%3==0){print
“Buzz”}...
青コーナー
ShelLINQ
seq 1 1000000|shellinq select
‘x=>{return
x%15==0?”FizzBuzz”:x%5==0?”Fizz”
:x%3==0?”Buzz”:””+x’} >
/dev/n...
ファイト!!!!!!
awk
ファイト!!!!!!
ShelLINQ
結果発表ッ!!
awk
real : 0.195s, user : 0.204s, sys : 0.000s
ShelLINQ
real : 0.982s, user : 0.892s, sys : 0.028s
awkの圧勝ッ!!!!
awkでええわ!
ちなみに
ShelLINQで作られた実行形式ファイル
だけで計測
大敗北ッ!!!!!
awkすごいぜ!
悔しくはないです
実行時間がすべてではないでしょ?
何とかしようと色々やってこれです
以上です
ShelLINQ ぜひ使ってね
https://github.com/xztaityozx/shellinq
Upcoming SlideShare
Loading in …5
×

シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話

1,297 views

Published on

7/1の29回シェル芸勉強会で話したスライドです

Published in: Science
  • Be the first to comment

  • Be the first to like this

シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話

  1. 1. シェル芸で使いたくて LINQが使えるコマンド作ったら awkでよかった話 たいちょー
  2. 2. みなさん#!/bin/bash(こんにちはの意) たいちょー Twitter : @xztaityozx_001 OITの4年生 /bin/bash在住 母語はC# アイコンステッカーあります
  3. 3. LINQ #とは LinQは日本の福岡県福岡市を拠点に活動 しているローカルアイドルグループ --Wikipediaより 今回は残念ながらこっちではないです
  4. 4. .NET framework の方の LINQ DBやXMLのようなデータだけでなく あらゆる情報ソースに適用できるクエリ DBにアクセスする感じでデータ構造を 操作できる
  5. 5. LINQの例 int[] A = new int[]{1,2,3, … ,10}; var B = A.Where(x=>x%2==0); // B = {2,4,6,8,10} var C = A.Where(x=>x%2==1).Select(x=>x+20); // C = {21,23,25,27,29}
  6. 6. うわっめちゃ強力じゃん すごいぞLINQ .NETの加護を受けているC#やVBや Powerシェル芸のつよみ
  7. 7. こういうの
  8. 8. 僕は 何かシェル芸をやってるときに と思います 思いませんか??
  9. 9. ツールを探す 多分無い ggりパワーが低いだけかもしれない いろいろggってたら自分のブログが出て きて恥ずかしかった
  10. 10. 無いなら作ればいいじゃない 作ってしまった ShelLINQ って言います https://github.com/xztaityozx/shellinq カッコいいロゴも作りました
  11. 11. ShelLINQの使い方 shellinq [TYPEs] [method query] … [-o [FORMAT]] EX) 偶数取り出す seq 1 30|shellinq where 'x=>x%2==0' ↑C#のラムダ ぎっとはぶ: xztaityozx/shellinq
  12. 12. awkみたいにクエリが書ける EX) 偶数取り出す seq 1 30|shellinq where 'x=>x%2==0' ↓ seq 1 30|shellinq where '$1%2==0' $0は全カラムを出力する
  13. 13. メソッドチェーンもできる seq 1 30|shellinq where '$1%2==0' select '$1+$1'
  14. 14. カラムが複数でもいける ls -l |sed '1d'| shellinq select '$1'
  15. 15. どんな実装か C#のソースコードを吐き出しているだけ それをmcsに通してビルド monoを使って実行 シェル芸の定義に従ってソースはrmする 入力の1行目を使って型推論()している
  16. 16. VS awk awkとバトルします 発表タイトルから結果が見えてますが お付き合いください
  17. 17. 対決内容 書きやすさは個人差があるので 1~1,000,000までのFizzBuzzの実行時間 timeコマンドを使って測定 環境はUbuntu 16.04
  18. 18. 赤コーナー awk seq 1 1000000|awk ‘{if(NR%15==0){print “FizzBuzz”}else if(NR%5==0){print “Fizz”}else if(NR%3==0){print “Buzz”}else{print $1}}’ > /dev/null
  19. 19. 青コーナー ShelLINQ seq 1 1000000|shellinq select ‘x=>{return x%15==0?”FizzBuzz”:x%5==0?”Fizz” :x%3==0?”Buzz”:””+x’} > /dev/null
  20. 20. ファイト!!!!!! awk
  21. 21. ファイト!!!!!! ShelLINQ
  22. 22. 結果発表ッ!! awk real : 0.195s, user : 0.204s, sys : 0.000s ShelLINQ real : 0.982s, user : 0.892s, sys : 0.028s
  23. 23. awkの圧勝ッ!!!! awkでええわ!
  24. 24. ちなみに ShelLINQで作られた実行形式ファイル だけで計測
  25. 25. 大敗北ッ!!!!! awkすごいぜ! 悔しくはないです 実行時間がすべてではないでしょ? 何とかしようと色々やってこれです
  26. 26. 以上です ShelLINQ ぜひ使ってね https://github.com/xztaityozx/shellinq

×