有时候需要从大文件中随机抽取N行出来进行模拟,但是用python或者别的语言感觉不太方便,linux下直接分割感觉会更快捷。一般可以考虑以下的方法:
shuf -n100 filename # 从文件中随机选取100行
sort -R filename | head -n100
-R参数是将文件随机顺序sort。
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是根据第一列排序,运行后输出:
因为种子不一样,所以结果与上图不同。
最后选取想要的行数,然后输出除了第一列的内容就可以了。