shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Imprimir sequência de números randomicamente, SEM REP


From: Alfredo Casanova
Subject: Re: [shell-script] Imprimir sequência de números randomicamente, SEM REPETIÇÃO
Date: Wed, 03 May 2017 14:16:17 +0000

$ ls 
a  A  b  B  c  C  d  D  e  E  f  F  g  G  h  H  i  I  j  J  k  K  l  L  m  M  n  N  o  O  p  P  q  Q  r  R  s  S  t  T  u  U  v  V  w  W  x  X  y  Y  z  Z
$ ls | wc -l
52
$ paste -d" " <(ls * |sed -E 's/^|$/\"/g') <(paste -d- <(echo {1..52}|tr ' ' '\n'|shuf)  <(ls *)|sed -E 's/^|$/\"/g') | sed 's/^/mv /g' 
mv "a" "46-a"
mv "A" "45-A"
mv "b" "4-b"
mv "B" "51-B"
mv "c" "8-c"
mv "C" "37-C"
mv "d" "42-d"
mv "D" "7-D"
mv "e" "33-e"
mv "E" "38-E"
mv "f" "14-f"
mv "F" "47-F"
mv "g" "28-g"
mv "G" "44-G"
mv "h" "39-h"
mv "H" "13-H"
mv "i" "5-i"
mv "I" "24-I"
mv "j" "20-j"
mv "J" "23-J"
mv "k" "9-k"
mv "K" "6-K"
mv "l" "18-l"
mv "L" "10-L"
mv "m" "22-m"
mv "M" "31-M"
mv "n" "50-n"
mv "N" "49-N"
mv "o" "15-o"
mv "O" "35-O"
mv "p" "16-p"
mv "P" "30-P"
mv "q" "43-q"
mv "Q" "1-Q"
mv "r" "34-r"
mv "R" "17-R"
mv "s" "29-s"
mv "S" "21-S"
mv "t" "12-t"
mv "T" "11-T"
mv "u" "41-u"
mv "U" "2-U"
mv "v" "36-v"
mv "V" "26-V"
mv "w" "19-w"
mv "W" "32-W"
mv "x" "25-x"
mv "X" "3-X"
mv "y" "27-y"
mv "Y" "52-Y"
mv "z" "40-z"
mv "Z" "48-Z"
$ paste -d" " <(ls|sed -E 's/^|$/\"/g') <(paste -d- <(echo {1..52}|tr ' ' '\n'|shuf)  <(ls)|sed -E 's/^|$/\"/g') | sed 's/^/mv /g'  | bash
$ ls
10-M  12-j  14-B  16-Z  18-u  1-T   21-f  23-D  25-I  27-w  29-i  30-U  32-n  34-L  36-r  38-h  3-k   41-d  43-F  45-Q  47-c  49-X  50-o  52-x  6-O  8-y
11-s  13-R  15-q  17-E  19-G  20-e  22-H  24-V  26-A  28-J  2-g   31-P  33-b  35-v  37-t  39-S  40-K  42-Y  44-m  46-z  48-C  4-N   51-W  5-p   7-a  9-l


On Wed, May 3, 2017 at 11:13 AM Alfredo Casanova <address@hidden> wrote:
Ah, no exemplo que enviei esqueci de colocar o step no echo. No seu caso, mude o echo {1..399} para echo {2..500..2}

On Wed, May 3, 2017 at 11:08 AM Alfredo Casanova <address@hidden> wrote:
Tem essa:

paste -d" " <(ls *.mp3 |sed -E 's/^|$/\"/g') <(paste -d- <(echo {1..399}|tr ' ' '\n'|shuf)  <(ls *.mp3)|sed -E 's/^|$/\"/g') | sed 's/^/mv /g' 
isso vai produzir o seguinte resultado: 
mv "Chico Buarque - Construção.mp3" "61-Chico Buarque - Construção.mp3"
mv "John Lennon - Imagine.mp3" "39-John Lennon - Imagine.mp3"
mv "Vinícius de Moraes - Garota de Ipanema.mp3" "241-Vinícius de Moraes - Garota de Ipanema.mp3"
mv "Chico Buarque - Construção.mp3" "308-Chico Buarque - Construção.mp3"
mv "John Lennon - Imagine.mp3" "1-John Lennon - Imagine.mp3"

e aí é só adicionar um | bash no final e ele vai mover tudo

paste -d" " <(ls *.mp3 |sed -E 's/^|$/\"/g') <(paste -d- <(echo {1..399}|tr ' ' '\n'|shuf)  <(ls *.mp3)|sed -E 's/^|$/\"/g') | sed 's/^/mv /g' | bash


On Wed, May 3, 2017 at 8:21 AM address@hidden [shell-script] <address@hidden> wrote:
 

Caro Dito


Que tal essa solução:

paste <(seq -f "%03g" 2 2 500 | shuf) <(ls meu_diretorio) | awk -F '\t' '{system("mv \042" $2 "\042 \042" $1 "-" $2 "\042")}'


Não sei no seu caso mas o "seq" comigo não preciso usar o " tr ' ' '\n' ", pois cada número já sai em uma linha distinta.
Talvez esse recurso só seja necessário se a construção fosse "echo {002..500..2}"

Obs.: O "\042" dentro do awk emula a aspas dupla ( " ) para a construção do comando.

Espero que ajude em algo

[]'s
Itamar


reply via email to

[Prev in Thread] Current Thread [Next in Thread]