Um one-liner Perl:
perl -p00E 'y/\n/ /;say s/(\S+\s+){3}\K/\n/g' file
Note que esta solução e Gnouc's assumem que o arquivo é pequeno o suficiente para ser armazenado na memória como um todo .
Explicação
-
-p
significa alias a cada registro do arquivo para$_
e imprime o conteúdo de$_
após cada registro ter sido processado. -
-00
significa definir o separador de registro como nulo para ler o arquivo inteiro como um registro. -
-E
significa tratar a seguinte cadeia como código Perl. Usar-E
em vez do usual-e
significa que posso usar o recursosay
. -
y/\n/ /
torna o arquivo inteiro uma linha (observe quey///
é sinônimo detr///
em Perl para obrigarsed
usuários). -
s/(\S+\s+){3}\K/\n/g
significa anexar uma nova linha após cada padrão de (espaço em branco seguido de espaço em branco repetido 3 vezes = = um vetor). - Como
s///
retornará o número de substituições feitas com sucesso, usá-lo como um argumento parasay
imprimirá o número de substituições (= vetores). - Depois que a contagem é impressa, o conteúdo de
$_
é impresso porque usamos-p
.
Atualizar
Se você quer o valor máximo:
perl -p00E 'y/\n/ /;s/(\S+\s+){1}\K/\n/g' file | sort -nr | head -1
A vantagem desta solução
Tem apenas um "número mágico". Em outras palavras, se você de repente começou a trabalhar com vetores 2D, tudo o que você precisa fazer é alterar o {3}
no código para {2}
.
A desvantagem desta solução
Se você não estiver familiarizado com o Perl, leia como um feitiço de magia negra.