Aqui está uma maneira simplista em awk
; se ele vir o padrão / dev / [0-9], copia qualquer padrão salvo & count e, em seguida, redefine o dispositivo & contagem; caso contrário, incrementa um contador. Depois de atingir o EOF, ele despeja o padrão salvo & contagem.
#!/bin/awk -f
{
if ( /\/dev\/[0-9]/ ) {
if (dev) { print dev, count; };
dev=$0;
count=0;
} else {
++count;
}
}
END {
print dev, count;
}
e como você tem várias versões do awk e a solução do perl do terdon, aqui está uma solução feia do bash + grep + sed, já que essa parecia ser a direção que você estava indo inicialmente:
#!/usr/bin/env bash
declare -a devs
devs=( $(grep ^/dev/ input) )
for ((i=0; i < ${#devs[@]} - 1; i++)); do
start=${devs[i]}
end=${devs[i+1]}
start=${start//\//\\/}
end=${end//\//\\/}
count=$(sed -n "/^$start/,/^$end/p" input | wc -l)
count=$(( count - 2 ))
echo for ${devs[i]}, count is $count
done
start=${devs[i]}
start=${start//\//\\/}
count=$(sed -n "/^$start/,\$p" input | wc -l)
count=$(( count - 1 ))
echo for ${devs[i]}, count is $count
O hack principal está escapando das barras invertidas nos nomes dos dispositivos antes de passá-los para sed
.