Linux shuf命令實(shí)現(xiàn)隨機(jī)打亂行順序
一. 基本語(yǔ)法
shuf 是 Linux 中一個(gè)非常強(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ī)生成一個(gè)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 "中獎(jiǎng)的人是→ " $0}'
中獎(jiǎng)的人是→ 趙六
apluser@FengYeHong-HP:0725$ shuf -n 1 name_list.txt | awk '{print "中獎(jiǎng)的人是→ " $0}'
中獎(jiǎng)的人是→ 李四
四. -i 生成范圍內(nèi)的整數(shù)
生成10到99內(nèi)的所有整數(shù),打亂之后,獲取前4個(gè),并每行顯示2個(gè)
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
centos7 mysql數(shù)據(jù)庫(kù)安裝和配置
本篇文章主要介紹了centos7 mysql數(shù)據(jù)庫(kù)安裝和配置 ,非常具有實(shí)用價(jià)值,希望對(duì)大家實(shí)用mysql能夠有所幫助2017-01-01
Linux之進(jìn)程間通信(共享內(nèi)存【mmap實(shí)現(xiàn)+系統(tǒng)V】)
這篇文章主要介紹了Linux之進(jìn)程間通信(共享內(nèi)存【mmap實(shí)現(xiàn)+系統(tǒng)V】),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
CentOS 5.1下跑Mono和Asp.net的實(shí)現(xiàn)方法分享
由于想研究在linux下跑.net程序的可行性,于是嘗試在CentOS5.1下搭建Mono環(huán)境和Asp.Net的服務(wù)器。Asp.Net的服務(wù)器是采用mod_mono和Apache的方式搭建(Nginx的搭建尚未研究)2012-04-04
linux系統(tǒng)內(nèi)核升級(jí)導(dǎo)致進(jìn)不去系統(tǒng)的解決方案
本文介紹了使用sudo apt-get update命令后,內(nèi)核更新導(dǎo)致顯示驅(qū)動(dòng)不匹配的問題,提供了兩種解決方法:重新安裝系統(tǒng)驅(qū)動(dòng)或進(jìn)入舊內(nèi)核系統(tǒng)刪除新內(nèi)核并更新GRUB,以恢復(fù)正常系統(tǒng)2026-01-01
linux下SVN配置實(shí)現(xiàn)項(xiàng)目目錄自動(dòng)更新以及源碼安裝的操作方法
下面小編就為大家分享一篇linux下SVN配置實(shí)現(xiàn)項(xiàng)目目錄自動(dòng)更新以及源碼安裝的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2017-12-12
如何在Linux中route?add命令添加路由(Linux?route)
route?add命令是用于管理Linux操作系統(tǒng)網(wǎng)絡(luò)路由,允許用戶添加、刪除或修改網(wǎng)絡(luò)路由表中的條目,在Linux系統(tǒng)上添加靜態(tài)路由,靜態(tài)路由是手動(dòng)配置的路由,它指定了數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)到達(dá)另一個(gè)網(wǎng)絡(luò)的路徑,通過添加靜態(tài)路由,可實(shí)現(xiàn)網(wǎng)絡(luò)分段、轉(zhuǎn)發(fā)和通信等2024-06-06

