Você pode usar:
tr -dc '\-0-9\n' | sort -u -t- -nk1,1 | grep -c .
... que é, reconhecidamente, mais do que um pouco inspirado pela resposta de muru aqui. Diferentemente, porém, eu uso grep
para contar as linhas em vez de wc
no caso de haver linhas em branco na entrada. Sua resposta não tem um problema de linha em branco, pois grep -o
só imprimirá linhas com sua correspondência (como grep -c
só as conta aqui) , mas tr
faz imprima linhas em branco porque a nova linha é um dos poucos caracteres que ela não exclui. Isso significa que qualquer número de linhas em branco na entrada distorceria os resultados de wc
em um.
Portanto, tr
é mais eficiente do que é grep -o
, mas provavelmente wc
bate grep
no departamento de contagem. Eu gosto desse jeito, penso, por razões de portabilidade, e também porque eu costumo tentar remover os dados com o filtro mais eficiente primeiro, e usar os menos eficientes posteriormente na cadeia.
Isso permite que sort
escolha os bits por linha que serão considerados em sua -u
nique sort baseada em sua -n
umeric sort -k
ey que é dividida em seu delimitador -t-
ab. tr
-d
elimina o -c
omplement de qualquer byte numérico, traço ou nova linha em sua entrada. Dessa forma - desde que não haja -
traços ocorrendo antes das cadeias numéricas que você deseja comparar, então a única coisa que resta em qualquer linha é:
#nothing at all
... ou ...
[numbers]
... ou ...
[numbers]-[more numbers]more-dashes-...
Assim, quando a saída é canalizada para sort
, instruímos apenas para comparar cadeias numéricas que ocorrem antes de um traço, se houver. Demos ou não - os únicos números que importam são os que você quer contar.
Então, nós grep -c
ount linhas contendo pelo menos um único caractere .
. O comando a seguir imprime 8
:
tr -dc '\-0-9\n' <<\IN | sort -u -t- -nk1,1 | grep -c .
psf7433-nlhrms
unit7433-nobody
unit7333-opera
bpx7333-operations
app7333-osm
unit7330-partners
psf7331-pdesmond
unit7333-pro-09-0jm
mnp7330-redir09o-0ect
unit7333-retailbanking
cpq7333-rkarmer
unit6333-sales
ring7323-support
unit7133-telco
post7323-uadb
sun7335-ukhrms
burp7133-wfnmreply
IN