Linux文件随机抽取N行

有时候需要从大文件中随机抽取N行出来进行模拟,但是用python或者别的语言感觉不太方便,linux下直接分割感觉会更快捷。一般可以考虑以下的方法:

1. shuf
shuf -n100 filename # 从文件中随机选取100行
2. sort
sort -R filename | head -n100

-R参数是将文件随机顺序sort。


3. awk

awk是一个处理文件神器,可以像下面这么写(别的写法也可实现):

awk 'BEGIN{srand()} {print rand()"\t"$0}' filename | sort -nk 1 | head -n100 | awk -F '\t' '{print $2}' # 假如输出的内容只有一列

awk 'BEGIN{srand()} {print rand()"\t"$0}' filename 这一句话,strand()是设定随机数种子,必须写在BEGIN中才能正常运行;rand()是产生0到1之间的随机数。当只运行这一句话时输出:



第一列是产生的随机数。sort -nk 1是根据第一列排序,运行后输出:



因为种子不一样,所以结果与上图不同。
最后选取想要的行数,然后输出除了第一列的内容就可以了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。