Hex numbering sequence

Friends, I am looking for a small script which generates HEX sequence. Input to the script is starting hex number - Group ID and number of members a group should have and total groups.

e.g: Here we are generating 2 groups with 4 Members each starting with hex 036A.
Output:
Group ID 036A, members below;
members 036B:036D;

Group ID 036E, members below;
members 036F:0371;

Help is heartily appreciated

---------- Post updated at 06:54 AM ---------- Previous update was at 06:51 AM ----------

Output in following format will also do:

Group ID 036A, members below;
member 036B
member 036C
member 036D

Group ID 036E, members below;
member 036F
member 0370
member 0371

Please help...

echo 036A 4 2 | perl -ane '$F[0]=hex $F[0];for ($j=0;$j<$F[2];$j++){printf "%s%.4X%s","Group ID ",$F[0]++,", members below;\n";for ($i=1;$i<$F[1];$i++){printf "%.4X\n",$F[0]++}}'
1 Like
$ echo 036A 4 2| ruby -e 'st,m,g=gets.split;m=m.to_i;g=g.to_i;1.upto(m*g){|x|h="0"+(st.hex+x-1).to_s(16);puts ((x-1)%m==0)?"Group ID #{h}, members below":"member #{h}"}'
Group ID 036a, members below
member 036b
member 036c
member 036d
Group ID 036e, members below
member 036f
member 0370
member 0371

A posix-compliant approach:

#!/bin/sh

# Usage: scriptname start-id group-count member-count

s=0x$1 g=$2 m=$3
printf 'a=%u; for(i=0;i<%u*%u;i++) a++\n' $s $m $g | bc |
  awk -v m=$m '{ printf (NR%m==1 ? "Group ID %.4X, members below;" : "member %.4X") "\n", $1 }'

If you have jot:

#!/bin/sh

# Usage: scriptname start-id group-count member-count

s=0x$1 g=$2 m=$3
jot -w 'member %.4X' $((g*m)) $s | awk 'NR%'$m'==1 {$0="Group ID "$2", members below;"}1'

If your awk implementation supports hexadecimal literals (posix does not require this):

#!/bin/sh

# Usage: scriptname start-id group-count member-count

awk -v s=0x$1 -v g=$2 -v m=$3 '
    BEGIN {
        for (i=0; i<m*g; i++) 
            printf (i%m==0 ? "Group ID %.4X, members below;" : "member %.4X") "\n", s+i
    }'
$ ./hexgroups.sh 036A 2 4
Group ID 036A, members below;
member 036B
member 036C
member 036D
Group ID 036E, members below;
member 036F
member 0370
member 0371

Regards,
Alister

Updated: seems I misunderstand. Anyway put the code here.

cat infile
Group ID 036A, members below;
members 036B:036D;

Group ID 036E, members below;
members 036F:0371;


awk -F"[:; ]" '/^members/ {for (i=strtonum("0x"$2);i<=strtonum("0x"$3);i++) printf "%s %04X\n", $1,i;next}1' infile

Group ID 036A, members below;
member 036B
member 036C
member 036D

Group ID 036E, members below;
member 036F
member 0370
member 0371

Appreciate everybodys help...Thanks so much.

---------- Post updated at 12:56 PM ---------- Previous update was at 12:54 PM ----------

if anybody has suggestion which produces o/p in the following format that would be great help

Group ID 036A, members below;
members 036B:036D;

Group ID 036E, members below;
members 036F:0371

---------- Post updated at 02:12 PM ---------- Previous update was at 12:56 PM ----------

bartus11;

Your script works like a charm. can you update to give me o/p in following format. O/P seems little funny but that is how my programme works...appreciate help

Group ID 036E, members below;
members 036F:0371 to group ID 036E