List Number de seqüências exatas em um arquivo

1
  11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1 

Eu tenho um arquivo como mostrado, mas em uma escala maior. Meu objetivo é produzir a quantidade de 111s, 1s, 11s, 1111s, ect. estão no arquivo. Eu vi muitos posts falando sobre fazer:

grep "\^word\" text_file
grep "\bword\b" text_file
grep -Fx "word" text_file
and so on...

Todos eles não produziram nada nem o arquivo inteiro. O que devo fazer para listar apenas alguns números?

    
por NyonX 21.05.2017 / 21:54

2 respostas

1

Usando tr , sort e uniq :

$ tr -s ' ' '\n' <file | sort | uniq -c
   1
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

Isso lhe dá uma contagem de uma linha vazia (a primeira linha na saída acima), mas você pode evitar isso com sed :

$ tr -s ' ' '\n' <file | sed '/^$/d' | sort | uniq -c
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

O pipeline altera todos os espaços para novas linhas, classifica as linhas resultantes e conta o número de ocorrências de cada linha.

    
por 21.05.2017 / 22:13
0

Eu não usaria o grep para esse, mas com o awk:

$ a="11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1"

$ awk '{for (i=1;i<=NF;i++) ++seen[$i]}END{for (k in seen) print k,"found:"seen[k]}' <<<"$a"
1 found:17
11 found:5
111 found:1
11111 found:2
1111111 found:1
11111111 found:1

Esta demonstração de linha única deve funcionar com todo o seu arquivo (substitua <<<"$a" por yourfile )

    
por 21.05.2017 / 22:04

Tags