Linux shuf命令实现随机打乱行顺序

 更新时间:2025年11月11日 14:54:46   作者: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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux常见基本命令与用法大全

    Linux常见基本命令与用法大全

    这篇文章主要介绍了Linux常见基本命令与用法,总结分析了Linux各种常见的操作命令,包括文件、用户、系统等常见操作命令与使用技巧,需要的朋友可以参考下
    2019-12-12
  • 使用Apache ab进行http性能测试

    使用Apache ab进行http性能测试

    这篇文章主要为大家详细介绍了使用Apache ab进行http性能测试,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • linux中xargs命令的各种使用技巧

    linux中xargs命令的各种使用技巧

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。下面这篇文章主要给大家介绍了关于linux中xargs命令用法的相关资料,需要的朋友可以参考借鉴,下面来跟着小编一起看看吧。
    2017-05-05
  • Ubuntu固定虚拟机ip地址的方法教程

    Ubuntu固定虚拟机ip地址的方法教程

    本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用NetworkManager或netplan进行配置,需要的朋友可以参考下
    2025-02-02
  • Linux使用sosreport实现生成系统报告

    Linux使用sosreport实现生成系统报告

    sosreport 命令是许多 Linux 发行版上可用的工具,特别是基于 Red hat 的系统,下面我们来看看如何使用sosreport实现生成系统报告吧
    2025-02-02
  • Apache压力测试工具的安装使用

    Apache压力测试工具的安装使用

    这篇文章主要介绍了Apache压力测试工具—安装并进行并发接口测试的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Linux区分SSD和机械硬盘的方法总结

    Linux区分SSD和机械硬盘的方法总结

    在 Linux 系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘 SSD 和机械硬盘 HDD)在性能、可靠性和适用场景上有着显著差异,本文给大家汇总了Linux区分SSD和机械硬盘的方法,需要的朋友可以参考下
    2025-05-05
  • linux利用read命令获取变量中的值

    linux利用read命令获取变量中的值

    对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解,下面这篇文章主要给大家介绍了关于linux如何利用read命令来获取变量中值的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Linux下自动删除归档日志文件的方法

    Linux下自动删除归档日志文件的方法

    这篇文章主要介绍了Linux下自动删除归档日志文件的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2016-12-12
  • vi与vim如何修改tab为4个空格方法示例

    vi与vim如何修改tab为4个空格方法示例

    在Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设置长度,非常灵活,下面这篇文章主要给大家介绍了关于vi与vim如何修改tab为4个空格的相关资料,需要的朋友可以参考下
    2018-07-07

最新评论