Stdin

從文件或流中取樣?

  • August 12, 2016

是否有任何實用程序可以在命令行上從流中過濾樣本,例如

  • 列印文件的每 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需要讀取完整的輸入才能執行任何操作。

引用自:https://unix.stackexchange.com/questions/302943