#!/usr/bin/env ruby # Copyright (C) 2013-2016 all contributors # License: GPL-3.0+ # frozen_string_literal: true # TODO # - option parsing: sox effects, stats effect options # - support piping out to external processes # - configurable output formatting # - Sequel/SQLite support require 'dtas/partstats' infile = ARGV[0] or abort "usage: #$0 INFILE" ps = DTAS::PartStats.new(infile) def nproc require 'etc' Etc.nprocessors rescue NoMethodError `nproc 2>/dev/null || echo 2`.to_i end opts = { jobs: nproc } stats = ps.run(opts) headers = ps.key_idx.to_a headers = headers.sort_by! { |(n,i)| i }.map! { |(n,_)| n } width = ps.key_width print " time " puts(headers.map do |h| cols = width[h] sprintf("% #{(cols * 6)+cols-1}s", h.tr(' ','_')) end.join(" | ")) stats.each do |row| trim_part = row.shift print "#{trim_part.hhmmss} " puts(row.map do |group| group.map do |f| case f when Float sprintf("% 6.2f", f) else sprintf("% 6s", f) end end.join(" ") end.join(" | ")) end