Para o arquivo 2 com seu formato simples de palavras separadas por espaços em branco, tente:
$ awk '{print NF}' file2
4
4
4
No awk, NF
é o número de campos. No awk por padrão, os caracteres das palavras são separados por espaços em branco.
Para o arquivo1, para o qual as palavras podem ser separadas por dois pontos ou espaços, precisamos adicionar :
ao separador de campos:
$ awk -F'[: \t]+' '{print NF}' file1
5
5
5
Melhoria
o awk vai achar que existem campos extras se uma linha tiver espaços em branco à esquerda ou à direita. Podemos consertar isso removendo qualquer espaço em branco antes de contarmos os campos, assim para o arquivo1:
awk -F'[: \t]+' '{gsub(/^[: \t]+|[: \t]+$/, ""); print NF}' file1
ou isto para o arquivo2:
awk '{gsub(/^[[:space:]]+|[[:space:]]+$/, ""); print NF}' file2
Na regex, ^[[:space:]]+
corresponde ao espaço em branco inicial e [[:space:]]+$
corresponde a espaços em branco finais. A combinação deles no comando gsub
remove os dois.
Generalização
Se o separador de campo puder ser qualquer um dos | : ou então, use:
awk -F'[-|: \t]+' '{gsub(/^[[-\|: \t]+|[[-\|: \t]+$/, ""); print NF}'
Exemplo:
$ cat file3
| [email protected] | er34532 |
| [email protected] | 764474 |
$ awk -F'[-|: \t]+' '{gsub(/^[[-\|: \t]+|[[-\|: \t]+$/, ""); print NF}' file3
2
2