#!/usr/bin/gawk -f BEGIN { Sfile = "sampled.arff" #print File","Wanted","Sample"sampled" freq(File,Wanted,Freq); #print Freq[0]","Freq[1]; if(Sample=="under") under(File,Wanted,Freq,Sfile); else if(Sample=="over") over(File,Wanted,Freq,Sfile); else if(Sample=="raw") raw(File,Sfile); } function freq(File,Wanted,Freq) { while(getline x < File) { if((x !~ /^\@data/)&&(x !~ /[%#].*/)&&(x !~ /^\@relation/)&&(x !~ /^\@attribute/)) { if(x ~ Wanted) Freq[0]++; else Freq[1]++; } if(x=="") Freq[1]--; } close(File); } function under(File,Wanted,Freq,Sfile, lose) { lose = Freq[0] if(Freq[1]>Freq[0]) { while(getline x < File) { if((x ~ /^\@data/)||(x ~ /[%#].*/)||(x ~ /^\@relation/)||(x ~ /^\@attribute/)||(x=="")) print x > Sfile; else if(x ~ Wanted) print x > Sfile; else if(lose>0) { print x > Sfile; lose--; } } } close(File); } function over(File,Wanted,Freq,Sfile, win,exline) { win = Freq[1] if(Freq[1]>Freq[0]) { while(getline x < File) { if((x ~ /^\@data/)||(x ~ /[%#].*/)||(x ~ /^\@relation/)||(x ~ /^\@attribute/)||(x=="")) print x > Sfile; else if(x ~ Wanted) { exline = x; print x > Sfile; win--; } else print x > Sfile; } for(win;win>0;win--) print exline > Sfile; } close(File); } function raw(File,Sfile) { while(getline x < File) { print x > Sfile } close(File); }