如何从文本文件中随机选择 500 行,但要确保始终包含标题。我的文件看起来像
列 1 列 2
AB
光盘
等等。第一行是标题。我试过 sort -r filename|head -n 500 但这并不能确保总是包含标题。谢谢
我会说
{ IFS= read -r head; echo "$head"; shuf | head -n 500; } < file
Run Code Online (Sandbox Code Playgroud)
经过进一步思考,这可能不是最好的解决方案:它打乱了文件,因此随机选择的行是乱序的。这可能无关紧要
如果确实重要,这里有一个技巧:
sed -n "$({ echo 1; seq $(wc -l <file) | sed 1d | shuf | head -n 500 | sort -n; } | sed 's/$/p/')" file
Run Code Online (Sandbox Code Playgroud)
命令替换打印出一个 sed 程序以从文件中打印 500 条随机行,但它们是按顺序排列的:
echo 1 => 总是包含标题seq $(wc -l <file) => 打印文件中从 1 到行数的数字sed 1d => 删除第一行(“1”) - 不想要标题两次shuf => 打乱行号head -n 500 => 拿 500 个sort -n => 按数字对数字进行排序sed 's/$/p/' => 在每行末尾添加一个“p”然后,外部 sed 程序执行类似的操作
sed -n "1p; 5p; 199p; 201p; ... 4352p" file
Run Code Online (Sandbox Code Playgroud)