日付一覧からファイルを結合する

次の様な日付一覧があるとする

2014-07-01
2014-07-02
2014-07-03
2014-07-04
2014-07-05
2014-07-06
2014-07-07
2014-07-08
2014-07-09

この日付をファイル名に含んだファイル郡があって、そのファイル郡をひとつに結合してしまいたい。 ログデータを扱っているときには、割とあるあるで起きる作業である。

この時、

  • 1 日付一覧を使って処理したいファイルパスの一覧を構築する
  • 2 一覧をcatコマンドでくっつける

という手順で結合操作を行なってしまう。

まず、日付の前後にパスを追加して、ファイルパスにしてしまう。

これにはsedコマンドを使う。

いま、日付一覧をdate_list.datに保存されているとする

でprefixに./data/users_at_と追加したいとする。

まずは、sedコマンドを使って、ファイルパスを作成する。

processed_tmp=`sed -e "s|^\(.\+\)$|./data/users_accessed_checklist/users_at_\1|g" date_list.dat` 

次に、改行文字を消す為にtrコマンドを利用する。

processed=`echo ${processed_tmp} | tr '\n' ' '`

とすると、奇麗に改行文字も消える。

この実行結果は次のようになっているはず。 echo ${processed}

./data/users_accessed_checklist/users_at_2014-07-01 ./data/users_accessed_checklist/users_at_2014-07-02 ./data/users_accessed_checklist/users_at_2014-07-03 ./data/users_accessed_checklist/users_at_2014-07-04 ./data/users_accessed_checklist/users_at_2014-07-05 ./data/users_accessed_checklist/users_at_2014-07-06 ./data/users_accessed_checklist/users_at_2014-07-07 ./data/users_accessed_checklist/users_at_2014-07-08 ./data/users_accessed_checklist/users_at_2014-07-09 ./data/users_accessed_checklist/users_at_2014-07-10 ./data/users_accessed_checklist/users_at_2014-07-11 ./data/users_accessed_checklist/users_at_2014-07-12 ./data/users_accessed_checklist/users_at_2014-07-13 ./data/users_accessed_checklist/users_at_2014-07-14 ./data/users_accessed_checklist/users_at_2014-07-15

あとは、この一覧にcatコマンドを適用してやればよい。

cat ${processed} > concatenated.data