具有特定比例的随机拆分文件

oww*_*w14 4 random awk split

我想随机80/20使用awk拆分文件.

我已阅读并尝试了在此处找到的选项,其中包含以下内容:

$ awk -v N=`cat FILE | wc -l` 'rand()<3000/N' FILE
Run Code Online (Sandbox Code Playgroud)

如果你想随机选择,效果很好.

但是,是否可以更改此awk以将一个文件拆分为两个80/20(或任何其他)比例的文件?

gle*_*man 9

随着gawk,你会写

gawk '
    BEGIN {srand()}
    {f = FILENAME (rand() <= 0.8 ? ".80" : ".20"); print > f}
' file
Run Code Online (Sandbox Code Playgroud)

例:

seq 100 > 100.txt
gawk 'BEGIN {srand()} {f = FILENAME (rand() <= 0.8 ? ".80" : ".20"); print > f}' 100.txt
wc -l 100.txt*
Run Code Online (Sandbox Code Playgroud)
100 100.txt
 23 100.txt.20
 77 100.txt.80
200 total
Run Code Online (Sandbox Code Playgroud)