mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
90 lines
2.6 KiB
Ruby
Executable file
90 lines
2.6 KiB
Ruby
Executable file
#!/usr/bin/ruby
|
|
|
|
require 'time'
|
|
|
|
# ================================================================
|
|
# Notes:
|
|
# * mlr --onidx --ofs ' ' filter '$experiment=="sort1b"' then cut -x -f experiment tn.out |pgr -nc -title cut -xlabel nlines -ylabel seconds -legend 'a b' -lop
|
|
#
|
|
# ...
|
|
# experiment=cat,nlines=100,mlrcat_seconds=3,awkcat_seconds=4
|
|
# experiment=cat,nlines=200,mlrcat_seconds=3,awkcat_seconds=4
|
|
# experiment=cat,nlines=300,mlrcat_seconds=3,awkcat_seconds=4
|
|
# experiment=cat,nlines=400,mlrcat_seconds=3,awkcat_seconds=4
|
|
# experiment=cut,nlines=100,mlrcut_seconds=3,awkcut_seconds=4
|
|
# experiment=cut,nlines=200,mlrcut_seconds=3,awkcut_seconds=4
|
|
# experiment=cut,nlines=300,mlrcut_seconds=3,awkcut_seconds=4
|
|
# experiment=cut,nlines=400,mlrcut_seconds=3,awkcut_seconds=4
|
|
# ...
|
|
|
|
# ================================================================
|
|
def run_progs_for_linecounts(experiment, linecounts, progdesc_map)
|
|
linecounts.each do |linecount|
|
|
run_progs_for_linecount(experiment, linecount, progdesc_map)
|
|
end
|
|
end
|
|
|
|
def run_progs_for_linecount(experiment, linecount, progdesc_map)
|
|
timing_fields = progdesc_map.collect do |progdesc, prog|
|
|
seconds = run_prog(experiment, linecount, progdesc, prog)
|
|
"#{progdesc}=#{seconds}"
|
|
end
|
|
puts "experiment=#{experiment},linecount=#{linecount},#{timing_fields.join(',')}"
|
|
end
|
|
|
|
def run_prog(experiment, linecount, progdesc, prog)
|
|
filename = "data/nlines/#{linecount}"
|
|
cmd = "#{prog} < #{filename} > /dev/null"
|
|
seconds = run_cmd(progdesc, cmd)
|
|
seconds
|
|
end
|
|
|
|
def run_cmd(desc, cmd)
|
|
t1 = Time.new
|
|
system(cmd)
|
|
status = $?
|
|
t2 = Time.new
|
|
secs = t2.to_f - t1.to_f
|
|
if status.to_i == 0
|
|
secs
|
|
else
|
|
'error'
|
|
end
|
|
end
|
|
|
|
# ----------------------------------------------------------------
|
|
linecounts = [1, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000]
|
|
|
|
run_progs_for_linecounts('cat', linecounts, {
|
|
"cat" => "cat",
|
|
"catc0" => "catc0",
|
|
"catc" => "catc",
|
|
"awkcat" => "awk -F , '{print}'",
|
|
"mlrcat" => "mlr cat"
|
|
})
|
|
|
|
run_progs_for_linecounts('cut', linecounts, {
|
|
"cut" => "cut -d , -f 1,4",
|
|
"awkcut" => "awk -F , '{print $1,$4}'",
|
|
"mlrcat" => "mlr cut -f a,x"
|
|
})
|
|
|
|
run_progs_for_linecounts('add', linecounts, {
|
|
"awkadd" => "awk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}'",
|
|
"mlradd" => "mlr put '$z=$x+$y'"
|
|
})
|
|
|
|
run_progs_for_linecounts('sort2', linecounts, {
|
|
"sort" => "sort -t, -k 1,4",
|
|
"mlrsort" => "mlr sort a,x"
|
|
})
|
|
|
|
run_progs_for_linecounts('sort1s', linecounts, {
|
|
"sort" => "sort -t, -k 1",
|
|
"mlrsort" => "mlr sort a"
|
|
})
|
|
|
|
run_progs_for_linecounts('sort1b', linecounts, {
|
|
"sort" => "sort -t, -k 4",
|
|
"mlrsort" => "mlr sort x"
|
|
})
|