App-keycommon
view release on metacpan or search on metacpan
scripts/keycommon view on Meta::CPAN
#!/usr/bin/perl
use 5.001 ; use strict ; use warnings ;
use Getopt::Std ; getopts '0:12:cf:nr_~/:' , \my%o ;
use Scalar::Util qw/looks_like_number/ ;
use Term::ANSIColor qw/:constants/ ; $Term::ANSIColor::AUTORESET = 1 ;
my $sep = $o{'/'} // "\t" ; # å
¥åºåã®åºåãæå
my $empty = $o{0} // 'undef' ; # 対å¿ããå¤ãç¡ãå ´åã®ä»£æ¿ã®å¤
my $cutpos = $o{f} // 1 ; # åè¡ãå·¦ããä½çªç®ã®åã§åãã
my %val ; # $val{ ãã¼ã®å¤ } [ ãã¡ã¤ã«çªå· ] = ããªã¥ã¼ã®å¤
my $pole = 0 ;
my $Flst = (defined $o{2} && $o{2} =~ m/\./ ) ; # åãã¡ã¤ã«ã§åããã¼ãåºç¾ããå ´åã«æå¾ã®ããªã¥ã¼ãæ¡ç¨ãããã©ããã®ãã©ã°
my $Fcon = (defined $o{2} && $o{2} =~ m/:/ ) ; # åãã¡ã¤ã«ã§åããã¼ãåºç¾ããå ´åã«æå¾ã®ããªã¥ã¼ãæ¡ç¨ãããã©ããã®ãã©ã°
my (@keg1,%keg1) ; # -1 ãæå®ãããå ´åããã¼ãæåã«èªã¾ããé ã«ãåºåã®é åºãä¸è´ããããããã«ä½¿ã夿°
&reading ;
&outputting ;
exit 0 ;
sub reading {
while ( <> ) {
chomp ;
do { ++ $pole ; next } if eof || m/^$/ ; # è¤æ°ã®ãã¼ã¿ã»ããã«å¯¾ããå¦ç
my @F = split /$sep/ , $_ , $cutpos + 1 ;
my $key = join $sep , splice @F , 0 , $cutpos ;# å
é ã®ã¿æããã
my $value = $F[0] // '' ; # æ®ã£ããã®ãæããã
( $key , $value ) = ( $value , $key ) if $o{'~'} ;
do { push @keg1 , $key unless $keg1 { $key } ++ } if $o{1} ;
if ( $Flst ) { $val{ $key } [ $pole ] = $value } # ãã¼(1åç®)ãã¨ã« ãã¡ã¤ã«çªå·ã表ã $pole ãã¨ã«å¤(2åç®)ãæ ¼ç´ã
elsif ($Fcon) { grep { if ( defined $_ ) { $_ .= ":$value" } else { $_ = $value } } $val{ $key } [ $pole ] }
else { $val{ $key } [ $pole ] //= $value } ; # ãã¼(1åç®)ãã¨ã« ãã¡ã¤ã«çªå·ã表ã $pole ãã¨ã«å¤(2åç®)ãæ ¼ç´ã
}
}
sub outputting {
my @keg = keys %val unless $o{1} ;
@keg =
$o{1} ? @keg1 :
$o{n} ?
(@{[sort {$a <=> $b} grep { looks_like_number($_) } @keg ]} ,
sort {$a cmp $b} grep { ! looks_like_number($_) } @keg ) :
sort @keg ;
@keg = reverse @keg if $o{r} ;
*UNDERLINE = sub {@_} unless $o{'_'} ;
for my $k ( @keg ) {
print scalar @{[grep {defined $_} @{$val{$k}} ]}, "\t" if $o{c} ;
print UNDERLINE $k ;
print join $sep , '' , map { $val{$k}[$_] // $empty } 0 .. $pole -1 ;
print "\n" ;
}
}
sub VERSION_MESSAGE {}
sub HELP_MESSAGE{
$0=~s|.*/|| ; $ARGV[1] //= '' ;
while(<DATA>){
s/\$0/$0/g ;
print $_ if $ARGV[1] =~ /opt/ ? m/^\ +\-/ : s/^=head1// .. s/^=cut// ;
}
exit 0 ;
}
__END__
=encoding utf8
=head1
$0
å
¥å:
1åç®ã¯ãã¼ã§2åç®ã¯åç
§å¤ãæã¤ã空è¡åºåãã¾ãã¯è¤æ°ã®ãã¡ã¤ã«ã«ãã
è¤æ°ã®ãã¼ã¿ã»ããã
ãã ããã²ã¨ã¤ã²ã¨ã¤ã®ãã¼ã¿ã»ããã«ããã¦ããã¼ã¯å
¨ã¦ç°ãªãã¨ãã¦ããã
åºå:
1åç®ã¯ãã¼ã®åä½µéåãiè¡ç®1åç®ã¯ãã¼ã®å¤ k[i] ã
iè¡ j+1åç®ã®å¤ã¯ãjçªç®ã®ãã¼ã¿ã»ããã«ããã
ãã¼ k[i] ã«å¯¾ããåç
§å¤ã¨ãªãã
ãªãã·ã§ã³:
-/ str : åºåãæåãã¿ãããæå®ãã夿´ããã
-~ : ãã¼ã¨ããªã¥ã¼ãå転ããã(å·¦å´ãããªã¥ã¼ãå³å´ããã¼ã¨ã¿ãªãã)
-_ : ãã¼ã«ä¸ç·ãå¼ããANSIã«ã©ã¼ã¨ã¹ã±ã¼ãã³ã¼ãã使ç¨ãã¦ããã
-c : åãã¼ã«è©²å½ãããã¡ã¤ã«ã®åæ°ãè¡ã®å
é ã«è¡¨ç¤ºããã(ãã®ãã¨ã§å
±ééåãæ¤åºããããªããã¼ãªãã¨ãã§ããã)
-f num : ãã¼ã¨ããªã¥ã¼ãåé¢ããä½ç½®ãæå®ãããæªæå®ãªã1ã§ããããã®å ´åãæå·¦åã¨ãã以å¤ã«åããã
-n : ãã¼ã®åºåé åºã«é¢ãã¦ãæåã«æ°å¤ã«ã¤ãã¦ã¯æ°ã®é åºã§ã½ã¼ããããã®æ¬¡ã«æ°å¤ä»¥å¤ãæååã§æ´åããã
-r : ãã¼ã®åºåé åºãéã«ããã
-0 str : 空æ¬ã«åããæååããã¨ãã°0ãæå®ãããæªæå®ãªãundefã
-1 : åºåããé åºã«é¢ãã¦ããã¼ã®é çªã¯ãå
¥åã§èªã¿åãã¨ãã«æåã«èªã¿ã¨ã£ããã¼ã®é ã«ä¸è´ãããã(-ræå®ãããã°éã«ãªãã)
-2 str : ï¼ã¤ã®ãã¼ã¿ã»ãã(é常ã¯ãã¡ã¤ã«)ã«ãåããã¼ã2å以ä¸ç¾ããå ´åã®æåã str ã§æå®ã
-2 1 : ãã©ã¡ã¼ã¿æååã« 1ã®æåãå«ã¾ãã¦ããããåããã¡ã¤ã«ã§åããã¼ã«2çªç®ä»¥éã«åºç¾ããå¤ã¯åãã®å¤ãæ¡ç¨ããã
-2 . : ãã©ã¡ã¼ã¿æååã« ããªãªã(.) ãå«ã¾ãã¦ããããåããã¡ã¤ã«ã«åããã¼ã«2çªç®ä»¥éã«åºç¾ããå¤ã¯æå¾ã®å¤ãæ¡ç¨ããã
-2 : : ãã©ã¡ã¼ã¿æååã« ã³ãã³(:) ãå«ã¾ãã¦ããããåããã¡ã¤ã«ã«åããã¼ã«ç¾ããå
¨ã¦ã®å¤ã : ã§é£çµãããã(<-- ãã¾ããããã§ãªããã)
--help : ãã®ãã«ãã表示ããã
ãã®ä»:
( run in 1.029 second using v1.01-cache-2.11-cpan-39bf76dae61 )