文字列をデリミタ指定してsplitする

1. cutを使う(簡単)

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

2. trでデリミタをIFSに変換しBash配列に格納する

 $ nums=($(echo '2016-02-03' | tr '-' ' '))
 $ echo ${nums[1]}
 02
  • cutよりは速い。(多分)
  • しかし、後述のパラメーター展開を使った方がより速い。(多分)

3. パラメータ展開で先頭もしくは末尾を取り出す

 $ dt='2016-02-03'
 $ echo ${dt%%-*}
 2016
 $ echo ${dt##*-}
 03
  • 先頭もしくは末尾を取り出すのなら、速くていい。

4. パラメータ展開でデリミタをIFSに変換しBash配列に格納する

 $ dt='2016-02-03'
 $ nums=(${dt//-/ })
 $ echo ${nums[1]}
 02
  • 変数名//の後にデリミタを指定し、/の後にワンスペースを置く。これで配列としてdtに格納できる。

参考

http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash


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

Last-modified: 2016-02-03 (水) 01:10:22