write ahead log

ロールフォワード用

readコマンドを使う[POSIXコマンド]

readコマンドはシェルスクリプト書くなら基本っぽい.

基本的に行指向で取り込んで,区切り文字ごとにフィールドで分けて勝手に変数に取り込んでくれる.

read [1フィールド目を入れる変数] [nフィールド目を入れる変数] ...

といった感じ. 区切り文字は特殊変数IFSで決める.

簡単な例

twinbird@:~/lab$ while read line
> do
>   echo "$line"
> done << END
> HELLO,
> WORLD.
> 
> Good
> Bye
> END
HELLO,
WORLD.

Good
Bye

これは全ての行を1行ずつ読み込んでechoしているだけ.
(データの入力にはヒアドキュメントを使っている)

もう少し込んだ例

下記のファイルがあるとして

twinbird@:~/lab$ more members.txt 
hiro,male,1991/06/10
hanako,female,1982/03/14
mika,female,1982/12/03

下記で簡単にカンマ区切りでデータを取得できる.
(CSVだとダブルクオーテーションの処理とかが面倒で,これだけではダメだが)

twinbird@:~/lab$ IFS=','
twinbird@:~/lab$ while read name sex birthday
> do
>   echo "Name:$name"
>   echo "Sex :$sex"
>   echo "Birthday:$birthday"
> done < members.txt 
Name:hiro
Sex :male
Birthday:1991/06/10
Name:hanako
Sex :female
Birthday:1982/03/14
Name:mika
Sex :female
Birthday:1982/12/03

オプション

詳細は例によってここで.

ここで見てもrオプションは使えると見て良さそう.

使いそうなのはrとtかなぁ.