我想從文件中選擇隨機行/單位,但單位由2行組成。從單位爲2行的文件中隨機選擇(單位)。
例如文件看起來像這樣
亞當
蘋果
柯以敏
糖果
史蒂夫
芯片
大衛
肉類
卡羅爾
胡蘿蔔
而且我要隨機子選擇讓說,2個單位
例如
亞當
蘋果
大衛
肉類
或
個史蒂夫
芯片
卡羅爾
胡蘿蔔
我使用shuf
和sort -R
嘗試,但他們只混洗1線。請有人幫助我嗎? 謝謝。
我想從文件中選擇隨機行/單位,但單位由2行組成。從單位爲2行的文件中隨機選擇(單位)。
例如文件看起來像這樣
亞當
蘋果
柯以敏
糖果
史蒂夫
芯片
大衛
肉類
卡羅爾
胡蘿蔔
而且我要隨機子選擇讓說,2個單位
例如
亞當
蘋果
大衛
肉類
或
個史蒂夫
芯片
卡羅爾
胡蘿蔔
我使用shuf
和sort -R
嘗試,但他們只混洗1線。請有人幫助我嗎? 謝謝。
您可以通過洗牌之前加入線(也可能不是一般的文件格式是一個壞主意,如果行描述一個單一的項目)與shuf
做到這一點:
$ < file sed -e 'N;s/\n/:/' | shuf | head -1 | tr ':' '\n'
Carol
Carrots
的sed
負荷一次兩行,並用冒號加入。
你不需要p,只需刪除-n標誌。另外,如果你的sed支持'\ n',那麼你不需要-e,它接受作爲arg的文件名,所以你不需要'<'。它可以寫成'sed'N; s/\ n /:/'file' – 123
接在正確的範圍內的隨機數,確保它是奇數(如果需要的話),然後使用sed
打印2行:
$ a=$(expr $RANDOM % \($(wc -l < input)/2 \) \* 2 + 1)
$ sed -n -e ${a}p -e $((a+1))p input
你選擇'expr'到'$(())'或'(())'上的任何原因? – 123
不,這只是我輸入的第一件東西。任何合理的人都會使用'a = $(($ RANDOM%($(wc -l <input)/ 2)* 2 + 1))' –
那麼,任何合理的人可能會完全做一些其他的:)但這個工程。 –
而不是選擇線來打印,可以行走的文件並以特定概率打印每個「單元」。例如,要在文件中打印(大致)10%的「單位」,您可以執行以下操作:
awk 'BEGIN{srand()} NR%2 && (rand() < .1) {print; getline; print}' input
90%的時間都不會爲我打印任何東西。 – 123
您希望能夠選擇多少個單位? –
選擇第二行和第三行是可以接受的嗎? –
您是否考慮過預處理數據,以便您只需隨機選擇單行,然後將所選行重新格式化爲每行兩行。 –