読者です 読者をやめる 読者になる 読者になる

bash の read に関するイマイチな仕様

bash の read で空文字のカラムがある場合、そのカラムの存在は無視され、右から詰められてしまう。
例えば、

while read col1 col2 col3
・・・

のようなスクリプトが標準入力から

hoge\t\tfuga

のようなレコードを受け取った場合、
 col1="hoge", col2="", col3="fuga"
ではなく、
 col1="hoge", col2="fuga", col3=""
となってしまう。

awkやsortコマンドでも同じような挙動をしてしまうらしい。
cut コマンドはちゃんと空白文字でもカラムとして認識してくれるみたい。
対処としては、perl等で処理するしかなさそう・・・
NULLが入る可能性のあるカラムを処理で使用しないのなら、cut コマンドでそういったカラムを除いてから処理するというのも手。

■デフォルトの区切り文字はタブとスペース

いつもタブ区切りファイルをインプットに使うので忘れいていたが、実はスペースも区切り文字として扱われる。よって、文字列の中にスペースがあると、別々なカラムとして認識されてしまう。
IFS=" " <- ctl+v,tab でタブ文字を入力
としておけば、タブだけを区切り文字として扱ってくれる。