久しぶりのスクリプト

業務の一環で


        03020100;
        07060504;
        0b0a0908;

行頭にタブの入った上記の様なデータを

0
1
2
3
4
5
6
7
8
9
10
11

に変換して欲しいという依頼がありまして。
要するに2桁の16進数が右から4つ並んだものを10進数にして一列に並べるのです。
当初シェルスクリプトでやろうと思ったのですが
なかなか手が思いつかない。
埒が明かないので Excel にインポートして

=LEFT(RIGHT("03020100;",3),2)

RIGHT 関数で右から2桁ずつ切り出して

=HEX2DEC("00")

で10進数に変換しました。(要「分析ツール」)
変換結果をタブ区切りのテキストにしてから
Cygwin で以下のコマンドを実行。

tr '\t' '\n' < input.txt > output.txt↵

(補足)コマンドラインのみで変換


cat input.txt | tr -d '\t' | tr -d ';' > med1.txt↵
cut -c7-8 med1.txt > c1.txt↵
cut -c5-6 med1.txt > c2.txt↵
cut -c3-4 med1.txt > c3.txt↵
cut -c1-2 med1.txt > c4.txt↵
paste c?.txt | tr '\t' '\n' > med2.txt↵
(echo "ibase=16"; tr '[a-z]' '[A-Z]' < med2.txt ) |
    bc > output.txt↵
rm med?.txt c?.txt↵

bc で16進数を扱うときは大文字にしないといけないようです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中