交換價值,我有一些CSV /表格數據在一個文件中,像這樣:巴什 - 在
1,7,3,2
8,3,8,0
4,9,5,3
8,5,7,3
5,6,1,9
(他們並不總是數字,只是隨機逗號分隔值個位數號碼。儘管如此,還是比較容易的。)
我想隨機洗牌40%的任何列。舉個例子,說第三個。所以也許3和1互相交換。現在,第三列是:
1 << Came from the last position
8
5
7
3 << Came from the first position
我試圖從bash
腳本,我的工作中的一個文件來做到這一點的地方,我沒有多少運氣。我一直徘徊在一些非常瘋狂和沒有結果的兔子洞口,這讓我以爲我走錯了路(不斷的失敗是什麼讓我不知所措)。
我用一連串的東西標記了這個問題,因爲我不完全確定我應該爲此使用哪個工具。
編輯:我可能會最終接受魯本斯的答案,但古怪的是,因爲它直接包含了交換的概念(我想我可以強調在原來的問題更多),它允許我指定交換列的百分比。它也適用於工作,這總是一個加號。
對於不需要這個的人,只是想要一個基本的洗牌,Jim Garrison的答案也有效(我測試了它)。
但是,魯本斯的解決方案的警告。我把這個:
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : "";
...
}
printf "\n";
取出printf "\n";
和移動換行符像這樣:
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : "\n";
...
}
,因爲只是在其他情況下,具有""
是造成awk
在每年年底寫斷字行(\00
)。有一次,它甚至設法用中文字符替換我的整個文件。雖然,說實話,這可能讓我在這個問題上做了一些額外的愚蠢行爲。
隨機化並不的強度文本處理工具,如'sed'或'awk' – 2013-03-19 04:52:55
你想選擇40%的列並完全洗牌,或者選擇一個(或多個)列並隨機洗牌40%? – FoolishSeth 2013-03-19 05:27:43
後者(40%一排柱子N)。 – 2013-03-19 05:28:49