Crie um índice alfabético com letras repetindo

1

Estou executando o Debian 9. No Bash eu posso echo {a..z} para o alfabeto, ou echo {a..z}{a..z} para imprimir combinações de letras. No entanto, gostaria de gerar um índice com: a b c d etc., em seguida, aa bb cc dd etc., em seguida, aaa bbb ccc ddd etc. até que seja aaaaa bbbbb (até zzzzz ). Como isso pode ser feito com a expansão de chaves ou outro método semelhante? Obrigado

    
por jbrock 15.10.2018 / 23:11

3 respostas

4

Você poderia fazer:

$ printf '%s ' {a..z}; echo
a b c d e f g h i j k l m n o p q r s t u v w x y z

$ printf '%s%s ' {a..z}{,}; echo
aa bb cc dd ee ff gg hh ... ss tt uu vv ww xx yy zz 

$ printf '%s%s%s ' {a..z}{,,}
aaa bbb ccc ddd eee ... ttt uuu vvv www xxx yyy zzz

Explicado: Uma expansão de chave criará um argumento para cada valor delimitado pela vírgula (e a cadeia principal):

$ echo A{d,u,j}
Ad Au Aj

Mas, se o valor estiver vazio, ele apenas repetirá a string principal:

$ echo A{,,}
A A A

Se a cadeia principal for uma expansão de contraventamento, todas as strings serão repetidas:

$ echo {one,two}{,,}
one one one two two two

Em seguida, o printf (e o eco à direita) são usados para formatar a saída:

$ printf '%s%s%s ' {one,two}{,,}; echo
oneoneone twotwotwo

Com valores de uma letra:

$ printf '%s%s%s ' {a..d}{,,}; echo
aaa bbb ccc ddd
    
por 16.10.2018 / 01:07
1

AFAIK, você não pode fazer isso puramente tendo bash fazendo alguma mágica de expansão. Mas você sempre pode usar

for c in {a..z}; do echo $c$c; done
for c in {a..z}; do echo $c$c$c; done
...
    
por 15.10.2018 / 23:20
0

Aqui está outra opção no Bash.

index=$(echo -n {a..z})
num=2
until ((num>5)); do
    for c in {a..z}; do
        case "$num" in
            2 ) index=$(echo -n "$index $c$c") ;;
            3 ) index=$(echo -n "$index $c$c$c") ;;
            4 ) index=$(echo -n "$index $c$c$c$c") ;;
            5 ) index=$(echo -n "$index $c$c$c$c$c") ;;
        esac
    done
((num++))
done
echo "$index"
  1. Adicione o primeiro conjunto ao index .
  2. Faça um loop quatro vezes para os quatro conjuntos restantes.
  3. Executar for loop para cada letra.
  4. A instrução case no ciclo for determina o número de instâncias que cada letra é adicionada ao índice.
por 17.10.2018 / 02:00