我正在尝试从(大)文件中随机抽样,同时始终保留一组“标题行”。标题行始终位于文件的顶部,与其他任何行不同,以#开头。
我正在处理的实际文件格式为VCF,但我保留了一般性问题
要求:
例如,请考虑以下示例文件(file.in):
#blah de blah
1
2
3
4
5
6
7
8
9
10
示例输出(file.out)将是:
#blah de blah
10
2
5
3
4
我有一个工作解决方案(在这种情况下,使用bash随机选择5个非标题行)。它能够从STDIN读取(我可以将file.in的内容捕获到命令的其余部分)但是它写入命名文件而不是STDOUT:
cat file.in | tee >(awk '$1 =~ /^#/' > file.out) | awk '$1 !~ /^#/' | shuf -n 5 >> file.out
答案 0 :(得分:2)
使用process substitution(感谢Tom Fenech),这两个命令都被视为文件 然后使用cat我们可以连接这些"文件"一起输出到STDOUT。
cat <(awk '/^#/' file) <(awk '!/^#/' file | shuf -n 10)
#blah de blah
1
2
3
4
5
6
7
8
9
10
#blah de blah
1
9
8
4
7
2
3
10
6
5