Como mostro a seqüência de caracteres numéricos de uma string?

4

Existe um comando autônomo ou em vi ou similar (pode ser gui) que mostrará a sequência numérica de uma string?

Entrada: O gato pulou em uma caixa.

Saída:

T h e   c a t   h o  p  p  e  d     i  n     a     b  o  x  .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
    
por a coder 30.10.2014 / 13:54

4 respostas

8

Aqui está uma abordagem híbrida perl / fold:

$ echo "The cat hopped in a box." | fold -w 1 | 
     perl -lne 'push @k, "$_ "; push @l,sprintf "%-2s",$.; END{print "@k\n@l"}'
T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  . 
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Explicação

  • fold -w 1 : isso irá dobrar a entrada em uma largura de um caractere, resultando em cada caractere de entrada impresso em uma linha separada.
  • perl -lne : o -l remove as novas linhas à direita da entrada e adiciona uma nova linha a cada print chamada; o n lê a entrada linha a linha e o e fornece o script para ser executado nele.
  • push @k, " $_"; : Adicione um espaço à linha atual ( $_ ) e salve-o no array @k .
  • push @l,sprintf "%-2s",$.; : sprintf retornará uma string formatada, aqui estamos dando a ela o número da linha atual ( $. ) e informando para imprimi-la com espaços adicionados conforme necessário para fazer seu comprimento 2. A string é então adicionada a a matriz @l .
  • END{print "@k\n@l"}' : assim que todo o arquivo for lido, imprima os dois arrays.

Se você precisar apenas numerar os caracteres e não se importar com a saída de várias linhas, uma abordagem mais simples é (usando uma string mais curta para simplificar):

$ echo "foo bar" | fold -w1 | cat -n
 1  f
 2  o
 3  o
 4   
 5  b
 6  a
 7  r
    
por 30.10.2014 / 14:25
7

É muito simples usar o shell e as ferramentas básicas:

$ echo "The cat hopped in a box." |
    (read a ; echo $a | sed 's/./&  /g' ; seq -ws" " 01 ${#a})
 T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  .  
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Explicação

A string é lida na variável $a . O ( ) executará os comandos dentro deles em um subshell , necessário para tornar o $a variável acessível. Em seguida, ele é passado para sed , que substitui cada caractere por si mesmo, seguido por dois espaços. Finalmente, o comando seq imprime uma lista de números 0 -padded de 01 para o comprimento da string $a .

    
por 30.10.2014 / 14:52
6

zsh :

$ text='The cat hopped in a box.'
$ chars=(${(s::)text})
$ print -aC$#chars $chars {1..$#chars}
T   h   e       c   a   t       h   o   p   p   e   d       i   n       a       b   o   x   .
1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24
    
por 30.10.2014 / 15:17
2

Você pode usar perl :

$ echo The cat hopped in a box. | perl -nle '
    printf "%-3s", $_ for split //;
    printf "\n";
    printf "%-3s", $_ for 1..length'
T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  .  
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
    
por 30.10.2014 / 14:00