* 文字列をデリミタ指定してsplitする [#v75ed8ce]

** 1. cut [#o3ce1967]
*** 1. cutを使う(簡単) [#u18f3b1c]

 $ echo '2016-02-03' | cut -d '-' -f 2
 02

- 簡単で使いやすい。後述の方法のようにBash配列を使わず、インデックスを指定して直接取り出せるので便利。
- しかし、遅い。ループで数百回以上繰り返すような場合、時間が掛かりすぎる事が多い。

** 2. trでデリミタをIFSに変換し、Bash配列に格納する [#m35eeac9]
*** 2. trでデリミタをIFSに変換しBash配列に格納する [#w36491fa]

 $ nums=($(echo '2016-02-03' | tr '-' ' '))
 $ echo ${nums[1]}
 02

- cutよりは速い。(多分)
- しかし、後述のパラメーター展開を使った方がより速い。(多分)

*** 3. パラメータ展開で先頭もしくは末尾を取り出す [#gdd057b6]
 $ dt='2016-02-03'
 $ echo ${dt%%-*}
 2016
 $ echo ${dt##*-}
 03

- 先頭もしくは末尾を取り出すのなら、速くていい。

*** 4. パラメータ展開でデリミタをIFSに変換しBash配列に格納する [#p26aade1]
 $ dt='2016-02-03'
 $ nums=(${dt//-/ })
 $ echo ${nums[1]}
 02

- 変数名//の後にデリミタを指定し、/の後にワンスペースを置く。これで配列としてdtに格納できる。

** 参考 [#y201409e]
http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS