Linux shuf命令实现随机打乱行顺序
作者:fengyehongWorld
shuf命令用于随机打乱行顺序,适用于随机抽样、生成随机数等,常用选项包括-n指定输出行数、-i生成范围内的整数、-e从参数中抽取数据,示例展示了如何乱序文件行、生成随机数字、从参数中抽取数据
一. 基本语法
shuf 是 Linux 中一个非常强大的命令,核心作用是 随机打乱行顺序,就像洗牌(shuffle)一样。
尤其适用于:
- 随机抽样
- 打乱顺序
- 生成随机数
| 选项 | 含义 |
|---|---|
| -n number | 输出 N 行 |
| -r | 允许重复(replacement) |
| -i LO-HI | 生成范围内整数 |
| -e item1 item2 ... | 从参数中抽样(而非文件) |
二. 基本使用
将文件的行乱序
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
将顺序输出的数据乱序
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
可以将生成的数据打散
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
随机生成一个12位的数字
xargs -n 1:行转列shuf | head -n 12:将数据打乱之后,只获取前12行tr -d '\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 指定输出的行数
将数据打乱之后,只获取前2行
apluser@FengYeHong-HP:0725$ seq 1 100 | shuf -n 2 10 64
随机获取文件中的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 生成范围内的整数
生成10到99内的所有整数,打乱之后,获取前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 从参数中抽取数据
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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
