多すぎて使えないオプション選手権 - coreutils-7.6 編

さあ!栄冠の一位は誰の手に!? 発表はわっふるわっふるの後で!!
























わっふる!





















わっふる!!















lsさん、オプション大杉><

ls.c           : 40 abcdfghiklmnopqrstuvwxABCDFGHILNQRSTUXZ1
pr.c           : 30 -0123456789DFJNTWabcdfhlmortvw
od.c           : 26 AaBbcDdeFfHhIijLlNOoSstvXx
sort.c         : 24 -bcCdfghikmMnorRsStTuVyz
cp.c           : 20 abdfHilLnprstuvxPRST
uniq.c         : 20 -0123456789Dcdfisuwz
du.c           : 17 0abchHklmsxBDLPSX
ptx.c          : 17 AFGMORSTWbifgotrw
tail.c         : 17 cnfFqsv0123456789
fmt.c          : 16 0123456789cstuwp
install.c      : 15 bcCsDdgmoptTvSZ
split.c        : 15 0123456789Cabdl
df.c           : 14 aBiFhHklmPTtvx
head.c         : 14 cnqv0123456789
who.c          : 14 abdlmpqrstuwHT
ln.c           : 11 bdfinstvFST
nl.c           : 11 hbfviplswnd
cat.c          : 10 benstuvAET
chcon.c        : 10 HLPRhvurtl
join.c         : 10 -aei12jotv
mv.c           :  9 bfintuvST
pinky.c        :  9 sfwiqbhlp
chgrp.c        :  8 HLPRcfhv
chown.c        :  8 HLPRcfhv
csplit.c       :  7 fbknsqz
id.c           :  7 agnruGZ
readlink.c     :  7 efmnqsv
rm.c           :  7 dfirvIR
shred.c        :  7 fnsuvxz
touch.c        :  7 acdfmrt
cut.c          :  6 bcdfns
date.c         :  6 dfrRsu
mktemp.c       :  6 dpqtuV
runcon.c       :  6 +rtulc
su.c           :  6 cflmps
tr.c           :  6 +cCdst
shuf.c         :  5 einoz
stat.c         :  5 cfLtZ
wc.c           :  5 clLmw
chmod.c        :  4 Rcfv
kill.c         :  4 lnst
md5sum.c       :  4 bctw
mkdir.c        :  4 pmvZ
seq.c          :  4 +fsw
stdbuf.c       :  4 +ioe
stty.c         :  4 -agF
truncate.c     :  4 cors
base64.c       :  3 diw
comm.c         :  3 123
dircolors.c    :  3 bcp
env.c          :  3 +iu
fold.c         :  3 bsw
pathchk.c      :  3 +pP
tac.c          :  3 brs
expand.c       :  2 it
mkfifo.c       :  2 mZ
mknod.c        :  2 mZ
nice.c         :  2 +n
paste.c        :  2 ds
pwd.c          :  2 LP
rmdir.c        :  2 pv
setuidgid.c    :  2 +g
sum.c          :  2 rs
tee.c          :  2 ai
timeout.c      :  2 +s
basename.c     :  1 +
chroot.c       :  1 +
dirname.c      :  1 +
nohup.c        :  1 +
printenv.c     :  1 +
tty.c          :  1 s
yes.c          :  1 +

やっつけな集計コード:

# cd coreutils-7.6/src && ~/this.pl *.c | sort -t: -k2nr
for my $f (@ARGV) {
    open my $src, '<', $f or die $!;
    my $getopt;
    while (<$src>) {
        if (/(getopt.*\(.*)/) {
            $getopt = $1;
            chomp $getopt;
            while ($getopt !~ /\)/) {
                chomp($_ = <$src>);
                $getopt .= $_;
            }
            last;
        }
    }
    next unless $getopt;
    my $optstring = (split /\s*,\s*/, $getopt)[2];
    my $refre;

    if ($f eq 'pr.c') {
        $optstring = '"-0123456789D:FJN:S::TW:abcde::fh:i::l:mn::o:rs::tvw:"';
    } elsif ($f eq 'du.c') {
        $optstring = '"0abchHklmsxB:DLPSX:"';
    } elsif ($f eq 'kill.c') {
        $optstring = '"ln:s:t"';
    }

    if ($optstring !~ /^"/) {
        $refre = qr/$optstring[^"]+"([^"]+)/;
    }
    if ($refre) {
        seek $src, 0, 0;
        while (<$src>) {
            if (/$refre/) {
                $optstring = $1;
                last;
            }
        }
    }
    close $src;
    $optstring =~ s/[a-zA-Z0-9]:://g;
    $optstring =~ s/[":]//g;
    next unless $optstring;
    printf "%-15s: %2d %s\n", $f, length($optstring), $optstring;
}