SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
WACODE
忙しいバイオインフォマティシャ
ンのための時短ワンライナー
@waco RIKEN
github.com/carushi
1
2
でかくて困っているデータ解析
3
O(NW^2) → O(NW^2/K+KW^2)
github.com/carushi/ParasoR
4
でかくて困っているデータ解析
開発に参加させていただいたソフトです、!
よろしくお願いします!!
• 今日はソフトで出したデータの処理の部分の話
• 特にシェルでのコマンドラインによる処理の高速化
• 要するにワンライナーをやります
• ふだんmac + zsh + coreutils/binutils
でかくて困っているデータ解析(再)
今回の流れ
Coding RNAを抽出
ファイルを1000個に分割
並列で実行
出力を確認
解析用のCSV, TXT作成
Rとかに投げる…
For busy people!!!
先輩に巨大ファイルの解析を頼まれた
1. やる
2. 帰ってやる
3. 帰ってカレー食べて
からやる
4. 明日やる
5. 明後日やる
6. …
どんなファイル?
>cat ookiifile.fa	
>NM_000001	
ACACACACACACAC…	
>NR_000001	
CACACACACACACA…	
>NM_000002	
AAAAAAAAAAAAAA…	
…	
二行ずつRefSeqのCoding
とNon-coding RNAの配列
が含まれている
この配列のうちcoding RNA
だけをfastaを受け付けるソ
フトに投げて計算させたい
計算資源がたくさんあるの
で1000並列で走らせるこ
とにしました
• bashから使うコマンド
• 組み込みのコマンド群 export, set, if, while(man builtin)
• /bin/, /usr/binなんかに入っているコマンド群(ふっとばすと使えないやつ)
• ワイルドカードやpipe (|)などはコマンドではない(man bash参照)
bashを動かす
まずNon-codingを抜きます
!
>grep -A 1 NM ookiifile.fa (後1行)	
!
>grep -B 1 NM ookiifile.fa (前1行) 	
!
>grep -A 1 NM ookiifile.fa | grep -v “--“	
	 > temp.fa
codingはNM, Non-codingはNRなので、NMを含む行とその次の行を出力します
複数行に分割されている場合は例えばawkで >NM のある行だけ改行を入れれば形式ok
cat ookiifile.fa ¦ awk '{if (substr($0,1,3) == ">NM") {print "n"$0 }else{printf $0}}'
1000ファイルに分割(実例)
>wc (行数ゲット)	
!
split.sh	
!
for i in {1..1000}	
do	
	 START=`(echo "($i - 1 ) * 行数/1000 + 1" | bc)`	
	 tail -n +$START temp.fa | head -n 行数 > split_$i.fa	
	 --なんか計算--	
done
行数一定で分割(実例)
> split -a 5 -d -l 50 temp.fa tmp	
!
!
> ls tmp* | sed 'p; s/tmp0*(.*)(.)/tmp12/g' 	
| xargs -n 2 mv	
!
!
> ls tmp* | sed 'p; s/tmp0*(.*)(.)/tmp12/g' 	
| xargs -n 2 mv; osascript -e 'say "end" using “Cellos"'
↑ジョブが終わったらendって喋らせる(オススメ)
スパコンあるある
なぜか数ジョブ落ちてる
計算結果
!
>ls	
!
out_1.txt out_2.txt out_4.txt … out_998.txt out_1000.tx
抜けがある
こういう確認もシェル芸で!
!
>find . -name out_*.txt | cut -d”_”
-f2 | sed ’s/.txt//‘ | sort -n |
diff <(cat -) <(seq 1 1000)
出力を整形
>cat out_0.txt	
>NM_000001	
1 0.5 0.3	
2 0.4 0.1	
1 0.3 0.3	
# owattayo!	
>NM_000002	
0 0.8 0.4	
0 0.1 0.2	
3 0.5 0.5	
…	
!
> seq 0 10 | xargs -I{} echo
“grep -h “^{} “ out_*.txt >
result_{}.txt” | bash 	
コメントを入れてい
るとあとで後悔する
ことも。。
!
> cat log.csv | grep -v "@" | cut -d"," -f3,3 | tr
-d """ | mecab | sort | uniq -c | sort -r -n -k1
> all.txt	
おまけ
ワンライナーには空白区切り・csvファイル!
mecabを使って自分のTwitterログを解析してみる
個人的オススメコマンド
time
script
tee
cowsay
awk
• シェルプログラミング実用テクニック
• どこまでいってもman
参考
20
Thank you for your listening!

Weitere ähnliche Inhalte

Was ist angesagt?

20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10Toshi Harada
 
最近のRust関連の活動
最近のRust関連の活動最近のRust関連の活動
最近のRust関連の活動Hattori Hideo
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsqlToshi Harada
 
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウムComputational Materials Science Initiative
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Kazuhiro Takahashi
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
バイナリ解析入門
バイナリ解析入門バイナリ解析入門
バイナリ解析入門aksechack0001
 
IPv6アドレスでお絵かき
IPv6アドレスでお絵かきIPv6アドレスでお絵かき
IPv6アドレスでお絵かきYasuyuki Nakamura
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしMasaki Matsushita
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合hiboma
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 

Was ist angesagt? (20)

20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
最近のRust関連の活動
最近のRust関連の活動最近のRust関連の活動
最近のRust関連の活動
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
 
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
2015-09-02 @ 大型実験施設とスーパーコンピュータとの連携利用シンポジウム
 
introduction of WalB
introduction of WalBintroduction of WalB
introduction of WalB
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
FUによるPSⅡの構造モデリング実習テキスト
FUによるPSⅡの構造モデリング実習テキストFUによるPSⅡの構造モデリング実習テキスト
FUによるPSⅡの構造モデリング実習テキスト
 
NTPとうるう秒
NTPとうるう秒NTPとうるう秒
NTPとうるう秒
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
バイナリ解析入門
バイナリ解析入門バイナリ解析入門
バイナリ解析入門
 
Jubatus on Mavericks
Jubatus on MavericksJubatus on Mavericks
Jubatus on Mavericks
 
Ras piでrt linux
Ras piでrt linuxRas piでrt linux
Ras piでrt linux
 
IPv6アドレスでお絵かき
IPv6アドレスでお絵かきIPv6アドレスでお絵かき
IPv6アドレスでお絵かき
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
 
Cassandra Summit 2016 注目セッション報告
Cassandra Summit 2016 注目セッション報告Cassandra Summit 2016 注目セッション報告
Cassandra Summit 2016 注目セッション報告
 
コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 

Ähnlich wie Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー

VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)Naoki Okino
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会ConoHa, GMO INTERNET
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Emma Haruka Iwao
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話Tokoroten Nakayama
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Yoshiki Shibukawa
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyMasashi Shibata
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳Uchio Kondo
 
TokyoR LT Rで連続データを離散化
TokyoR LT Rで連続データを離散化TokyoR LT Rで連続データを離散化
TokyoR LT Rで連続データを離散化tetsuro ito
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響Masahito Zembutsu
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another ApproachDaisuke Miyakawa
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)Masataka Kondo
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話Nozomu KURASAWA
 

Ähnlich wie Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー (20)

VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)
 
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
このべん第二回 ~「できない子ほどかわいくしたい!ConoHa補完計画」勉強会
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳
 
TokyoR LT Rで連続データを離散化
TokyoR LT Rで連続データを離散化TokyoR LT Rで連続データを離散化
TokyoR LT Rで連続データを離散化
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
Info talk #36
Info talk #36Info talk #36
Info talk #36
 
20210510 software design
20210510 software design20210510 software design
20210510 software design
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話
 

Wacode 忙しいバイオインフォマティシャンのための時短ワンライナー