Stdin
從文件或流中取樣?
是否有任何實用程序可以在命令行上從流中過濾樣本,例如
- 列印文件的每 100 行或
- 以 0.01 的機率列印文件的一行或
- 通過諸如水庫採樣之類的算法?
更新:到目前為止,我發現:
- 列印文件的每 100 行:
sed -n '0~100p'
(GNU) awk 的簡單解決方案:
100 分之一(數字可被 100 整除的行):
do_something | awk 'NR % 100 == 0'
或偽隨機:
do_something | awk 'rand() < 0.01'
這些數字可能不會完全一致,並且可能需要添加
BEGIN{ srand() }
以為每次執行初始化一個新種子。
如果你
sort
的機器上有支持-R
(--random-sort
) 的 GNU,你可以$ sort -R myfile | head -n 1000
從文件中獲取 1000 條隨機行。但不適用於流,因為
sort
需要讀取完整的輸入才能執行任何操作。