Random 按特定比例随机分割文件

Random 按特定比例随机分割文件,random,awk,split,Random,Awk,Split,我想使用awk随机80/20分割一个文件 我已经阅读并尝试了以下建议: $ awk -v N=`cat FILE | wc -l` 'rand()<3000/N' FILE $awk-vn=`cat FILE | wc-l`'rand()如果你用gawk写 gawk ' BEGIN {srand()} {f = FILENAME (rand() <= 0.8 ? ".80" : ".20"); print > f} ' file 随机80/20分割是什么意思

我想使用awk随机80/20分割一个文件

我已经阅读并尝试了以下建议:

$ awk -v N=`cat FILE | wc -l` 'rand()<3000/N' FILE
$awk-vn=`cat FILE | wc-l`'rand()如果你用gawk写

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

随机80/20分割是什么意思?例如,将文件分成两部分:1部分80%和2部分20%。如果我有1000行——一个文件中有800行,另一个文件中有200行——但是一个文件中有800行的随机选择,另一个文件中有200行的随机选择。你需要正好80/20,还是大约80/20?如果近似值足够好,那么类似于
If random(100)<80然后将\u写入\u文件1,否则将\u写入\u文件2
将是一种可行的模式。如果你需要一个精确的分割,你可以完全洗牌的行在文件中,然后分割…大约是足够好的。然而,你认为哪种语言是实现这一目标的最佳方式?@owwoow14好吧,很可能没有一种语言能产生一种真正的“最佳方式”。如果要使用随机数生成器方法,显然需要在语言中提供随机数生成器和
If…then…else
构造
awk
bash
zsh
perl
python
ruby
lua
C
Fortran
Ada
Cobol
,以及更多的软件都将达到这一最低阈值。我最初的评论实际上只是将模式显示为与语言无关的伪代码——将其翻译为您选择的语言应该相当简单。。。
seq 100 > 100.txt
gawk 'BEGIN {srand()} {f = FILENAME (rand() <= 0.8 ? ".80" : ".20"); print > f}' 100.txt
wc -l 100.txt*
100 100.txt
 23 100.txt.20
 77 100.txt.80
200 total