Este foi o mais próximo:
grep -Eo '[0-9]+|' filename | sort -u | wc -l
mas perdeu o objetivo por
- não ancora a correspondência no início da linha
- classificando / removendo desnecessariamente duplicatas dos dados
Para ancorar a expressão, coloque "^"
no início do padrão e escape do "|" (já que é um metacaractere):
grep -Eo '^[0-9]+\|' filename | sort -u | wc -l
Próximo - descarte o sort -u
. O grep ignora as linhas de continuação, e parece possível que algumas "duplicatas" possam ser removidas e que não sejam realmente duplicadas se as informações extras forem usadas.
Por fim, descarte o wc -l
: POSIX grep tem uma opção -c
que diz ao grep para imprimir a contagem de correspondências. Solte a opção -o
(não é necessário). Então tudo que você precisa é
grep -Ec '^[0-9]+\|' filename