Definition
A block consists of consecutive lines with the same first fields.
In the following example, colon(':') is used as the field separator, and there are 4 'blocks': their first fields are 1001, 1028, 1032, and 1437, respectively.
Raw Input Desired Output
099       :213  :126  :0250:EOP099
1001      :66   :128  :0250:1001
1001      :73   :168  :0250:1001-1
1001C     :66   :168  :0250:1001-2
1003      :73   :168  :0250:1003
1011      :73   :168  :0300:1011
1028      :66   :126  :0250:1028
1028      :66   :168  :0250:1028-1
1030      :73   :168  :0300:1030
1032      :105  :168  :0345:1032
1032      :105  :168  :0380:1032-1
1033C     :09   :126  :0250:1033
1437      :408  :128  :0305:1437
1437      :571  :128  :0305:1437-1
1437      :574  :130  :0305:1437-2
1001      :66   :128  :0250:1001
1001      :73   :168  :0250:1001-1
1028      :66   :126  :0250:1028
1028      :66   :168  :0250:1028-1
1032      :105  :168  :0345:1032
1032      :105  :168  :0380:1032-1
1437      :408  :128  :0305:1437
1437      :571  :128  :0305:1437-1
1437      :574  :130  :0305:1437-2
Script and Comments
Script1
[ 1] $!N
[ 2] /^\([^:]*:\).*\n\1/!D
[ 3] :loop
[ 4] P
[ 5] s/^.*\n//
[ 6] $!N
[ 7] /^\([^:]*:\).*\n\1/b loop
[ 8] P
[ 9] D
Comments
  1. The script shown in the left is an improved implementation of the following flowchart.
  2. In the flowchart, the condition '$' will be true if the last line of the file has been read.
  3. Flowchart: