我有很多这样的文本文件:
>ALGKAHOLAGGATACCATAGATGGCACGCCCT
>BLGKAHOLAGGATACCATAGATGGCACGCCCT
>HLGKAHOLAGGATACCATAGATGGCACGCCCT
>DLGKAHOLAGGATACCATAGATGGCACGCCCT
>ELGKAHOLAGGATACCATAGATGGCACGCCCT
>FLGKAHOLAGGATACCATAGATGGCACGCCCT
>JGGKAHOLAGGATACCATAGATGGCACGCCCT
>POGKAHOLAGGATACCATAGATGGCACGCCCT
有没有办法使用 awk 进行采样而不用替换?
例如,我有这 8 行,我只想在新文件中随机抽取其中的 4 行,而不进行替换。 输出应如下所示:
>FLGKAHOLAGGATACCATAGATGGCACGCCCT
>POGKAHOLAGGATACCATAGATGGCACGCCCT
>ALGKAHOLAGGATACCATAGATGGCACGCCCT
>BLGKAHOLAGGATACCATAGATGGCACGCCCT
提前致谢
最佳答案
随机抽取 10% 的行怎么样?
awk 'rand()>0.9' yourfile1 yourfile2 anotherfile
我不确定你所说的“替换”是什么意思...这里没有替换,只是随机选择。
基本上,它会精确地查看每个文件的每一行一次,并在 0 到 1 的区间内生成一个随机数。如果随机数大于 0.9,则输出该行。所以基本上它是为每一行掷一个 10 面的骰子,只有当骰子出现为 10 时才打印它。一行不可能被打印两次 - 当然,除非它在你的文件中出现两次。
为了增加随机性 (!),您可以按照@klashxx 的建议在开头添加一个 srand()
awk 'BEGIN{srand()} rand()>0.9' yourfile(s)
关于bash - 使用 awk 进行无放回采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303717/