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基本特性和Linux的应用,希望通过这篇文章可以让你对Linux操作系统有一个更好的了解
    2021-06-06
  • centos7 mysql数据库安装和配置

    centos7 mysql数据库安装和配置

    本篇文章主要介绍了centos7 mysql数据库安装和配置 ,非常具有实用价值,希望对大家实用mysql能够有所帮助
    2017-01-01
  • Linux之进程间通信(共享内存【mmap实现+系统V】)

    Linux之进程间通信(共享内存【mmap实现+系统V】)

    这篇文章主要介绍了Linux之进程间通信(共享内存【mmap实现+系统V】),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • CentOS 5.1下跑Mono和Asp.net的实现方法分享

    CentOS 5.1下跑Mono和Asp.net的实现方法分享

    由于想研究在linux下跑.net程序的可行性,于是尝试在CentOS5.1下搭建Mono环境和Asp.Net的服务器。Asp.Net的服务器是采用mod_mono和Apache的方式搭建(Nginx的搭建尚未研究)
    2012-04-04
  • linux系统内核升级导致进不去系统的解决方案

    linux系统内核升级导致进不去系统的解决方案

    本文介绍了使用sudo apt-get update命令后,内核更新导致显示驱动不匹配的问题,提供了两种解决方法:重新安装系统驱动或进入旧内核系统删除新内核并更新GRUB,以恢复正常系统
    2026-01-01
  • Linux nohup命令原理及实例解析

    Linux nohup命令原理及实例解析

    这篇文章主要介绍了Linux nohup命令原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • linux误删nginx.conf文件恢复方式

    linux误删nginx.conf文件恢复方式

    这篇文章主要介绍了linux误删nginx.conf文件恢复方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • linux下SVN配置实现项目目录自动更新以及源码安装的操作方法

    linux下SVN配置实现项目目录自动更新以及源码安装的操作方法

    下面小编就为大家分享一篇linux下SVN配置实现项目目录自动更新以及源码安装的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 如何在Linux中route add命令添加路由(Linux route)

    如何在Linux中route add命令添加路由(Linux route)

    route add命令是用于管理Linux操作系统网络路由,允许用户添加、删除或修改网络路由表中的条目,在Linux系统上添加静态路由,静态路由是手动配置的路由,它指定了数据包从一个网络到达另一个网络的路径,通过添加静态路由,可实现网络分段、转发和通信等
    2024-06-06
  • 深入理解Linux内存管理之free命令的使用

    深入理解Linux内存管理之free命令的使用

    在 Linux 系统中,内存是关键的资源之一,管理和监控内存的使用情况对系统的稳定性和性能至关重要,free 命令是 Linux 中用于查看内存使用情况的重要工具,下面我们就来看看它的具体使用吧
    2026-01-01

最新评论