SlideShare uma empresa Scribd logo
1 de 20
シェルで繰り返し処理
USP友の会 @papiron
繰り返し処理
• コンピュータの得意技
• データ処理の基本
• プログラミング言語に必ず搭載
繰り返し処理
• シェルスクリプトでは?
• ワンライナーでは?
• フィルタとは?
• 高速処理するには?
お題
右のような
連続する文字列を
出力をする方法を
考えてみる
羊が1匹
羊が2匹
・・
・・
羊が99匹
羊が100匹
制御構造を使う(1)
$ n=1;while [ $n -le 100 ]; do echo '羊が'$n'匹';
n=`expr $n + 1`; done
羊が1匹
羊が2匹
..
..
羊が99匹
羊が100匹
シェルでも制御構造が使える
whileループで繰り返し処理
制御構造を使う(1)
#!/bin/sh
n=1
while [ $n -le 100 ]
do
echo '羊が'$n'匹'
n=`expr $n + 1`
done
ワンライナでは見にくいので
シェルスクリプトで記載
数列データ作成の方法
$ seq 1 100
1
2
..
100
bashのブレース展開
を使う
$ echo {1..100}
1 2 3 .. 99 100
seqコマンドを使う
制御構造を使う(2)
$ for n in `seq 100`; do echo '羊が'$n'匹'; done
$ for n in {1..100} ; do echo '羊が'$n'匹'; done
1から100の数列を準備
繰り返し処理はforループを使用
`seq 100`はシェルのコマンド置換機能
制御構造を使う(2)
#!/bin/sh
for n in `seq 100`
do
echo '羊が'$n'匹'
done
ワンライナでは見にくいので
シェルスクリプトで記載
制御構造を使う(3)
$ seq 100 | while read n; do echo '羊が'$n'匹'; done
1から100の数列を準備
繰り返し処理のwhileループにパイプ接続
制御構造を使う(3)
#!/bin/sh
seq 100 |
while read n
do
echo '羊が'$n'匹'
done
ワンライナでは見にくいので
シェルスクリプトで記載
xargsを使う(1)
$ seq 100 | xargs printf '羊が%d匹n'
1から100の数列を準備
xargsにパイプ接続してprintfコマンドへ
printf '羊が%d匹' 1 2 3 4 .. 99 100
実質は下記のコマンドが実行
繰り返し実行が無いため高速処理が期待
xargsを使う(2)
$ seq 100 | xargs -I@ echo '羊が@匹'
1から100の数列を準備
xargsの-Iオプションを利用
echo '羊が1匹'
echo '羊が2匹'
..
echo '羊が100匹'
実質は右記のコマンドが
実行されている
シェルにコマンド列を
$ seq -f 'echo 羊が%g匹' 100 | sh
下記のようなコマンド列を作成
シェルにパイプで渡して実行
echo 羊が1匹
echo 羊が2匹
..
echo 羊が99匹
echo 羊が100匹
パイプ
シェ
ル
フィルタコマンドで
$ seq 100 | sed 's/^/羊が/' | sed 's/$/匹/'
1から100の数列を準備
パイプでsedに渡して処理
sedがフィルタとして動作
コマンドの繰り返し実行が無いため
高速な処理が期待出来る
繰り返し処理の考え方
• 処理したいデータリストを準備
• 1行1レコードなテキストデータ
• データファイル名一覧
• コマンドの出力
繰り返し処理の考え方
• 処理するコマンドのデザイン
• フィルタとして動作するか?
• GNU dateはオプションでフィルタ動作
• 複数の引数が指定出来るか?
• lsコマンド、fileコマンドなど
繰り返し処理の考え方
• フィルタとして動作する
• これが出来れば理想的
• パイプで高速処理の可能性
繰り返し処理の考え方
• 複数の引数が指定出来る
• xargsの利用を検討する
• xargsは引数が長すぎても大丈夫
繰り返し処理の考え方
• フィルタも複数引数もダメ
• 制御構造を考える
• xargsの-nや-Iオプションの利用を考える

Mais conteúdo relacionado

Mais procurados

Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
takesako
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
Takashi Kawachi
 
bash(set)コマンドのオプション3選
bash(set)コマンドのオプション3選bash(set)コマンドのオプション3選
bash(set)コマンドのオプション3選
Yuuki Namikawa
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
Atsushi Tadokoro
 
Interactive Music II SuperCollider入門 5 時間構造をつくる
Interactive Music II SuperCollider入門 5  時間構造をつくるInteractive Music II SuperCollider入門 5  時間構造をつくる
Interactive Music II SuperCollider入門 5 時間構造をつくる
Atsushi Tadokoro
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
三七男 山本
 

Mais procurados (20)

Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
brainfuckを吐く自作言語bf-reusable
brainfuckを吐く自作言語bf-reusablebrainfuckを吐く自作言語bf-reusable
brainfuckを吐く自作言語bf-reusable
 
20150329 tokyo r47
20150329 tokyo r4720150329 tokyo r47
20150329 tokyo r47
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
 
RをAWSで使おう
RをAWSで使おうRをAWSで使おう
RをAWSで使おう
 
bash(set)コマンドのオプション3選
bash(set)コマンドのオプション3選bash(set)コマンドのオプション3選
bash(set)コマンドのオプション3選
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
第2回ぞくパタ
第2回ぞくパタ第2回ぞくパタ
第2回ぞくパタ
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
Interactive Music II SuperCollider入門 5 時間構造をつくる
Interactive Music II SuperCollider入門 5  時間構造をつくるInteractive Music II SuperCollider入門 5  時間構造をつくる
Interactive Music II SuperCollider入門 5 時間構造をつくる
 
艦これタイマー for firefox addonの拡張
艦これタイマー for firefox addonの拡張艦これタイマー for firefox addonの拡張
艦これタイマー for firefox addonの拡張
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 

Último

Último (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

シェルで繰り返し処理

Notas do Editor

  1. 情報処理する上で、データと命令は文字列を扱うことが多い プログラムコードも文字列
  2. 情報処理する上で、データと命令は文字列を扱うことが多い プログラムコードも文字列