problem with counter

i having a file

xxxxxxxxxxxxxxx1234   ...........value can be  change
xxxxxxxxxxxxxxx1235
xxxxxxxxxxxxxxxx1236
.
.
.
.
xxxxxxxxxxxxxxxxx1300 ...........value can be  change

i want to cut last four characters of first line and last line and find the missing pattern.

output should be like this

missing pattern are  1240.1242.1289  ("." is sequence separator)
awk '{print substr($0, length($0)-3)} ' inputfile | sort -nu > outfile
start=$(head -1 outfile)
end=$( tail -1 outfile)
while [ $start -le $end ]
do
     echo $start
     grep -q $start || echo $start
     start=$((  $start + 1 ))
done > badfile
printf "missing patterns are "
tr -s '\n'  '.'  < badfile

try that

$ awk -F"." '
# First line, just take the pattern and skip to the next
(!F) { F=$NF; next }
# If the sequence doesn't end in the next number, keep adding until it does.
++F != $NF { D=$NF; while(F < D) { $NF=F++;  print $0 " missing"; } }' OFS="." data
1240.1242.1323 missing
1240.1242.1324 missing
1240.1242.1384 missing
1240.1242.1385 missing
1240.1242.1445 missing
1240.1242.1446 missing
1240.1242.1574 missing
1240.1242.1575 missing
1240.1242.1737 missing
1240.1242.1738 missing
1240.1242.1917 missing
1240.1242.1918 missing
1240.1242.1919 missing
1240.1242.2115 missing
1240.1242.2243 missing

$

Hi sagar_1986,

One way using perl:

$ cat infile
xxxxxxxxxxxxxxx1234
xxxxxxxxxxxxxxx1236
xxxxxxxxxxxxxxx1237
xxxxxxxxxxxxxxx1239
$ cat script.pl
use strict;
use warnings;

my (@nums, @missed_nums);

while ( <> ) {
        chomp;
        push @nums, substr $_, -4;
}

my ($i, $j);
for ( ($i,$j) = ( (shift @nums) + 1, pop @nums); $i < $j; $i++ ) {
        if ( @nums && $nums[0] == $i ) {
                shift @nums;
                next;
        }

        push @missed_nums, $i;
}

printf qq[%s\n], join q[.], @missed_nums;
$ perl script.pl infile
1235.1238

dear jim mcnamara

i hv tried urs suggestion but their is some error
log is like this

> set -x
> awk '{print substr($0, length($0)-3)} ' new1.txt | sort -nu > new2.txt
>  start=$(head -1 new2.txt)
> end=$( tail -1 new2.txt)
> while [ $start -le $end ]
>  do
> echo $start
>  grep -q $start || echo $start
> start=$((  $start + 1 ))
> done > badfile
> printf "missing patterns are "
>  tr -s '\n'  '.'  < badfile
> set +x
>  }
+ sort -nu
+ awk {print substr($0, length($0)-3)}  new1.txt
+ 1> new2.txt
+ + head -1 new2.txt
start=7566
+ + tail -1 new2.txt
end=8128
+ 1> badfile
+ [ 7566 -le 8128 ]
+ echo 7566
+ grep -q 7566

the script just hanged ....

the part of new2.txt is as below

7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919

---------- Post updated at 06:12 AM ---------- Previous update was at 06:07 AM ----------

thank you very much for the reply,bt i am very new in UNIX world.I didn't get ant thing.where is the input file to be given