見出し画像

【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


相手に都合でデータフォーマットが強制される場合に
受け取る側のシステムでの挙動を考慮する必要がありました。

では

いいなと思ったら応援しよう!