Linux shuf命令實(shí)現(xiàn)隨機(jī)打亂行順序
更新時(shí)間:2025年11月11日 14:54:46 作者:fengyehongWorld
shuf命令用于隨機(jī)打亂行順序,適用于隨機(jī)抽樣、生成隨機(jī)數(shù)等,常用選項(xiàng)包括-n指定輸出行數(shù)、-i生成范圍內(nèi)的整數(shù)、-e從參數(shù)中抽取數(shù)據(jù),示例展示了如何亂序文件行、生成隨機(jī)數(shù)字、從參數(shù)中抽取數(shù)據(jù)
一. 基本語法
shuf 是 Linux 中一個非常強(qiáng)大的命令,核心作用是 隨機(jī)打亂行順序,就像洗牌(shuffle)一樣。
尤其適用于:
- 隨機(jī)抽樣
- 打亂順序
- 生成隨機(jī)數(shù)
| 選項(xiàng) | 含義 |
|---|---|
| -n number | 輸出 N 行 |
| -r | 允許重復(fù)(replacement) |
| -i LO-HI | 生成范圍內(nèi)整數(shù) |
| -e item1 item2 ... | 從參數(shù)中抽樣(而非文件) |
二. 基本使用
將文件的行亂序
apluser@FengYeHong-HP:0725$ cat A.txt apple banana cherry water month apluser@FengYeHong-HP:0725$ cat A.txt | shuf cherry banana water apple month
將順序輸出的數(shù)據(jù)亂序
apluser@FengYeHong-HP:0725$ seq 1 6 | shuf 1 2 6 4 5 3 apluser@FengYeHong-HP:0725$ seq 1 6 | shuf | xargs 3 5 1 4 6 2 apluser@FengYeHong-HP:0725$ seq 1 6 | shuf | xargs -L 2 4 6 2 1 5 3
可以將生成的數(shù)據(jù)打散
seq 1 5 | awk 'BEGIN{OFS=","} {
printf "%d,user_name_%03d,auid_%03d,地球%d\n", $1, $1, $1, $1
}' | shuf | sed '1i No,auid,用戶名,地址'
# ????????????
No,auid,用戶名,地址
2,user_name_002,auid_002,地球2
3,user_name_003,auid_003,地球3
5,user_name_005,auid_005,地球5
4,user_name_004,auid_004,地球4
1,user_name_001,auid_001,地球1
隨機(jī)生成一個12位的數(shù)字
xargs -n 1:行轉(zhuǎn)列shuf | head -n 12:將數(shù)據(jù)打亂之后,只獲取前12行tr -d '\n':刪除換行符,實(shí)現(xiàn)列轉(zhuǎn)行
apluser@FengYeHong-HP:0725$ echo {A..Z} {a..z} {0..9} | xargs -n 1 | shuf | head -n 12 | tr -d '\n';echo
YUqCy9QdNvaW
三. -n 指定輸出的行數(shù)
將數(shù)據(jù)打亂之后,只獲取前2行
apluser@FengYeHong-HP:0725$ seq 1 100 | shuf -n 2 10 64
隨機(jī)獲取文件中的1行
apluser@FengYeHong-HP:0725$ cat name_list.txt
張三
李四
王五
趙六
apluser@FengYeHong-HP:0725$ shuf -n 1 name_list.txt | awk '{print "中獎的人是→ " $0}'
中獎的人是→ 趙六
apluser@FengYeHong-HP:0725$ shuf -n 1 name_list.txt | awk '{print "中獎的人是→ " $0}'
中獎的人是→ 李四
四. -i 生成范圍內(nèi)的整數(shù)
生成10到99內(nèi)的所有整數(shù),打亂之后,獲取前4個,并每行顯示2個
apluser@FengYeHong-HP:0725$ shuf -i 10-99 -n 4 | xargs -L 2 83 48 81 20 apluser@FengYeHong-HP:0725$ shuf -i 10-99 -n 4 | xargs -L 2 58 34 64 68
五. -e 從參數(shù)中抽取數(shù)據(jù)
apluser@FengYeHong-HP:0725$ shuf -e 香蕉 蘋果 橘子 西瓜 橘子 西瓜 蘋果 香蕉 apluser@FengYeHong-HP:0725$ shuf -e $(echo "香蕉 蘋果 橘子 西瓜") 西瓜 香蕉 蘋果 橘子 apluser@FengYeHong-HP:0725$ shuf -e $(seq 1 3) 3 1 2 apluser@FengYeHong-HP:0725$ shuf -e $(seq 1 3) 3 2 1
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux使用sosreport實(shí)現(xiàn)生成系統(tǒng)報(bào)告
sosreport?命令是許多?Linux?發(fā)行版上可用的工具,特別是基于?Red?hat?的系統(tǒng),下面我們來看看如何使用sosreport實(shí)現(xiàn)生成系統(tǒng)報(bào)告吧2025-02-02
Linux區(qū)分SSD和機(jī)械硬盤的方法總結(jié)
在 Linux 系統(tǒng)管理中,了解存儲設(shè)備的類型和特性是至關(guān)重要的,不同的存儲介質(zhì)(如固態(tài)硬盤 SSD 和機(jī)械硬盤 HDD)在性能、可靠性和適用場景上有著顯著差異,本文給大家匯總了Linux區(qū)分SSD和機(jī)械硬盤的方法,需要的朋友可以參考下2025-05-05

