With perl
:
perl -lne '
if (/ low=(\d+) up=(\d+) /) {
$range = $2 - $1 + 1;
$count[$range == 1]++;
$max_range = $range if $range > $max_range;
}
END {
printf "individual data: %d\nrange data: %d\nrange expanded: %d\n",
$count[1], $count[0], $max_range;
}' < your-file
Or if the range expanded is meant to be the overall range of all values for non-discrete ones as opposed to maximum length of a range for any single line:
perl -lne '
if (/ low=(\d+) up=(\d+) /) {
$count[$2 == $1]++;
unless ($1 == $2) {
$min_low = $1 if $1 < $min_low;
$max_up = $2 if $2 > $max_up;
}
}
END {
printf "individual data: %d\nrange data: %d\nrange expanded: %d\n",
$count[1], $count[0], $max_up - $min_low + 1;
}' < your-file