【IT】ゼロ埋めのデータ処理
皆さま
こんにちは
FTP等で他のサーバからデータ受領するデータ(数字)で
よく桁数合わせのため、
0(ゼロ)埋めされたデータ形式であること多々あります。
多くの場合、データは、10進数となりますが、
Linuxの場合、先頭に0(ゼロ)がついている場合、
8進数と解釈されてしまいます。
0埋めされた8桁の数字を変数に代入
$ TMP_NUMBER="00000123"
変数の内容を確認(文字列で認識のためそのまま表示)
$ echo $TMP_NUMBER
00000123
数字に変換して表示(元々の数字が8進数と解釈されため、10進数に直された値が表示)
$ echo $((TMP_NUMBER))
83
8進数で123のとき10進数では、
1x8x8+2x8+3=83となります。
あまり、8進数で処理する事例もありませんので
多くの場合、誤ったデータとなります。
また、数字で8以上を使った場合には、以下のエラーとなります。
エラーになった方が、問題が隠れず逆に問題判別出来るかと思います。
8以上を含む数字を変数に代入
$ TMP_NUMBER="00000899"
8進数では処理出来ないとエラーになる
$ echo $((TMP_NUMBER))
-bash: 00000899: value too great for base (error token is "00000899")
8進数で処理されたり、エラーとなってしまっては、システムとして
機能しませんので以下を使って変換が必要なります。
0埋めを削除します。
$ NEW_TMP_NUMBER=`echo $TMP_NUMBER |awk '{gsub("^0*","",$1);print}'`
0が削除されていること確認
$ echo $NEW_TMP_NUMBER
899
数字に変換します。
$ echo $((NEW_TMP_NUMBER))
899
相手に都合でデータフォーマットが強制される場合に
受け取る側のシステムでの挙動を考慮する必要がありました。
では