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
-
-psignifica alias a cada registro do arquivo para$_e imprime o conteúdo de$_após cada registro ter sido processado. -
-00significa definir o separador de registro como nulo para ler o arquivo inteiro como um registro. -
-Esignifica tratar a seguinte cadeia como código Perl. Usar-Eem vez do usual-esignifica que posso usar o recursosay. -
y/\n/ /torna o arquivo inteiro uma linha (observe quey///é sinônimo detr///em Perl para obrigarsedusuários). -
s/(\S+\s+){3}\K/\n/gsignifica 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 parasayimprimirá 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.