次のように、ファイルにCSV/表形式のデータがあります。
1,7,3,2
8,3,8,0
4,9,5,3
8,5,7,3
5,6,1,9
(これらは常に数字ではなく、ランダムなコンマ区切りの値です。ただし、例としては1桁の数字の方が簡単です。)
任意の列の40%をランダムにシャッフルしたいと思います。例として、3番目のものを言います。したがって、おそらく3と1は互いに交換されます。3番目の列は次のとおりです。
1 << Came from the last position
8
5
7
3 << Came from the first position
作業中のスクリプト内からファイル内でこれを実行しようとしていますが、bash
あまり運がありません。私はかなりクレイジーで実りのgrep
ないウサギの穴をさまよっているので、私は間違った方向に進んでいると思います(絶え間ない失敗が私をひっくり返すものです)。
どのツールを使用すべきか完全にはわからないので、この質問にたくさんのタグを付けました。
編集:おそらくルーベンスの答えを受け入れることになりますが、それはスワッピングの概念が直接含まれているため(元の質問でもっと強調できたと思います)、パーセンテージを指定できるため、奇妙です交換用の列の。それはたまたま機能しますが、これは常にプラスです。
これを必要とせず、基本的なシャッフルが必要な人には、ジム・ギャリソンの答えも機能します(私はそれをテストしました)。
しかし、ルーベンスの解決策についての警告の言葉。私はこれを取りました:
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : "";
...
}
printf "\n";
を削除しprintf "\n";
、改行文字を次のように上に移動しました。
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : "\n";
...
}
""
elseケースを使用するだけでawk
、各行の終わりに壊れた文字が書き込まれるためです(\00
)。ある時点で、ファイル全体を漢字に置き換えることさえできました。正直なところ、これにはおそらく私がこの問題に加えてさらに愚かなことをすることが含まれていました。