#!/usr/bin/perl
use
5.010;
use
Term::ANSIColor
qw/:constants color/
;
$Term::ANSIColor::AUTORESET
= 1 ;
@ARGV
= ( (
grep
m/^-/ ,
@ARGV
) , (
grep
!m/^-/ ,
@ARGV
) )
if
!
grep
/^--$/ ,
@ARGV
;
getopts
'=v'
, \
my
%o
;
do
{
select
STDERR ; HELP_MESSAGE () }
if
!
@ARGV
;
my
@fq
;
my
%fq_
;
my
$N
= 0 ;
my
$dum
= <>
if
$o
{
'='
} ;
while
( <> ) {
chomp
;
$fq
[
$N
]{
$_
} ++ ;
$fq_
{
$_
} ++ ;
if
(
eof
) {
$N
++ ;
my
$dum
= <>
if
$o
{
'='
} && !
eof
() } ;
}
my
%bfq
;
my
%bfq_
;
my
%bfq_min
;
my
%bfq_max
;
for
my
$k
(
keys
%fq_
) {
my
@which
=
grep
{
exists
$fq
[
$_
]{
$k
} } 0 ..
$N
-1 ;
my
$B
= sum0
map
{ 1 <<
$_
}
@which
;
$bfq_
{
$B
} ++ ;
$bfq
{
$B
} [
$_
] +=
$fq
[
$_
] {
$k
}
for
@which
;
next
unless
$o
{v} ;
$bfq_min
{
$B
} //=
$k
;
$bfq_min
{
$B
} =
$k
if
$bfq_min
{
$B
} gt
$k
;
$bfq_max
{
$B
} //=
$k
;
$bfq_max
{
$B
} =
$k
if
$bfq_max
{
$B
} lt
$k
;
}
print
join
(
"\t"
,
"cardinal"
, (
map
{
"seq$_"
} 1 ..
$N
) ,
$o
{v} ? (
'min'
,
'max'
) : () ) ,
"\n"
;
for
my
$B
(
sort
{
$a
<=>
$b
}
keys
%bfq_
) {
my
@tmp
=
map
{
$_
// 0 }
map
{
$bfq
{
$B
} [
$_
] } 0 ..
$N
-1 ;
push
@tmp
,
$bfq_min
{
$B
} ,
$bfq_max
{
$B
}
if
$o
{v} ;
print
join
"\t"
,
$bfq_
{
$B
} ,
@tmp
;
print
"\n"
;
}
sub
VERSION_MESSAGE {}
sub
HELP_MESSAGE {
$ARGV
[1] //=
''
;
open
my
$FH
,
'<'
, $0 ;
while
(<
$FH
>){
s/\$0/
$Script
/g ;
print
$_
if
s/^=head1// .. s/^=cut// and
$ARGV
[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close
$FH
;
exit
0 ;
}