ランダムな位置の値を特定の制限付きで置き換える

ランダムな位置の値を特定の制限付きで置き換える

列内の数字の 10% をランダムに他の特定の数字に置き換える必要があります。たとえば、最初の位置を除く任意の数字の 10% をランダムに「1」に置き換えます。

ファイル1.txt内

1 1234567890
2 0987654321

ファイル2.txtを出力

1 1234561890
2 0987651321

答え1

次のスクリプトを repwith1.sh として保存します。

cat | while read procl
  do echo -n "${procl:0:1}"
     for i in `seq 1 $((${#procl}-1))`
       do if [ $((RANDOM%10)) -eq 1 ]
             then if echo "${procl:$i:1}" | grep -q "[0-9]"
               then echo -n "1"
               else echo -n "${procl:$i:1}"
             fi
             else echo -n "${procl:$i:1}"
          fi
       done
     echo ""
  done

次のように使用します:

$ cat (file name) | bash repwith1.sh

ファイルに保存する場合は、次のようにします。

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

関連情報