Mudança aleatória de lugar na linha com restrições

Mudança aleatória de lugar na linha com restrições

Como eu poderia mudar aleatoriamente os locais dos caracteres em um arquivo de texto, com alguma probabilidade (digamos 10%)?

arquivo:

1  34567
2  12356
3  16987

resultado:

1  35674
2  12653
3  61987

Responder1

Salve o seguinte script em scramble.sh:

posts=""
arrlen=0
rempos=0

cat | while read procl
  do for i in `seq 0 $((${#procl}-1))`
       do let arrlen=$arrlen+1
       done
     # scramble characters
     posts=""
     for i in `seq 0 $((${#procl}-1))`
       do if [ $((RANDOM%5)) -eq 1 ]
             then rempos=$((RANDOM%arrlen))
             else rempos=0
          fi
          posts+=${procl:$rempos:1}
          procl="${procl:0:$((rempos))}${procl:$((rempos+1)):$((arrlen-rempos-1))}"
          let arrlen=$arrlen-1
       done
      echo "$posts"
  done

Então use assim:

$ cat (file name) | bash scramble.sh

por exemplo

$ cat test.txt | bash scramble.sh
36475
15236
81679

E se você quiser salvar o resultado em um arquivo faça:

$ cat (file name) | bash scramble.sh > (new file name)

informação relacionada