2013年1月31日木曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9)の8章(ファイルハンドルへのリファレンス), 8.6(練習問題)2を解いてみる。

その他参考書籍

2.

コード(BBEdit)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';
use IO::Tee;

my %names = ();

while(<>){
    next unless /^(\w+):/;
    my $name = lc $1; 
    my $fh = $names{$name} ||= IO::File->new(">$name.info") or die $!;
    print $fh $_;
}

入出力結果(Terminal)

$ ./sample.pl log_file.txt
$ ls *.info
gilligan.info lovey.info monkeyman.info skipper.info
ginger.info maryann.info professor.info thurston.info
$ cat gilligan.info
Gilligan: 1 coconut
Gilligan: 1 banana
Gilligan: 1 banana
Gilligan: 1 papaya
Gilligan: 1 kiwifruit
Gilligan: 2 mangoes
Gilligan: 1 kiwifruit
Gilligan: 2 kiwifruits
Gilligan: 2 mangoes
Gilligan: 1 mango
Gilligan: 1 kiwifruit
Gilligan: 1 kiwifruit
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 2 papayas
Gilligan: 1 mango
Gilligan: 3 bananas
Gilligan: 1 kiwifruit
Gilligan: 1 papaya
Gilligan: 1 kiwifruit
Gilligan: 1 kiwifruit
Gilligan: 1 banana
Gilligan: 2 bananas
Gilligan: 2 kiwifruits
Gilligan: 4 coconuts
Gilligan: 3 mangoes
Gilligan: 2 coconuts
Gilligan: 2 kiwifruits
Gilligan: 1 kiwifruit
Gilligan: 1 mango
Gilligan: 1 coconut
Gilligan: 1 coconut
$

pythonの場合。

sample.py

コード(BBEdit)

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

import sys, re

names = {}
for line in open(sys.argv[1]):
    matched = re.search(r"^(\w+):", line)
    name = matched.group(1)
    if not name in names.keys():
        f = open(name.lower() + ".info", 'a')
        f.write(line)
        names[name] = f
    else:
        names[name].write(line)
for f in names.values():
    f.close()

入出力結果(Terminal)

$ rm *.info
$ ./sample.py log_file.txt
$ ls *.info
gilligan.info lovey.info monkeyman.info skipper.info
ginger.info maryann.info professor.info thurston.info
$ cat gilligan.info
Gilligan: 1 coconut
Gilligan: 1 banana
Gilligan: 1 banana
Gilligan: 1 papaya
Gilligan: 1 kiwifruit
Gilligan: 2 mangoes
Gilligan: 1 kiwifruit
Gilligan: 2 kiwifruits
Gilligan: 2 mangoes
Gilligan: 1 mango
Gilligan: 1 kiwifruit
Gilligan: 1 kiwifruit
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 1 coconut
Gilligan: 2 papayas
Gilligan: 1 mango
Gilligan: 3 bananas
Gilligan: 1 kiwifruit
Gilligan: 1 papaya
Gilligan: 1 kiwifruit
Gilligan: 1 kiwifruit
Gilligan: 1 banana
Gilligan: 2 bananas
Gilligan: 2 kiwifruits
Gilligan: 4 coconuts
Gilligan: 3 mangoes
Gilligan: 2 coconuts
Gilligan: 2 kiwifruits
Gilligan: 1 kiwifruit
Gilligan: 1 mango
Gilligan: 1 coconut
Gilligan: 1 coconut
$

0 コメント:

コメントを投稿