2つのテキスト内の数字を1行ずつ割り算する
30分プログラム、その604。2つのテキスト内の数字を1行ずつ割り算する via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_169。
わりと単純な問題だとは思うんだけど、出力例がちょっとややこしい。
$ cat a.txt 20 18 0 0 $ cat b.txt 25 20 0 14 0
という2つのファイルから
80 GYO = 1 90 GYO = 2 GYO = 3 0 GYO = 4
という出力を得るのが正解らしいけど、20/25は80じゃないし、GYOというのもよく分からない。
コードを読んでみると、どうも割り算じゃなくてパーセントを出力してて、GYOは行番号を示しているらしい。
えー、GYOはないわー。行番号をカウントしとくのも面倒だし今回は無しでいいや。必要ならcat -nとかにパイプすればいいと思う。
使い方
$ cat a.txt 20 18 0 0 $ cat b.txt 25 20 0 14 0 $ perl div.pl a.txt b.txt 80 90 NaN 0
ソースコード
#! /usr/bin/perl # -*- mode:perl; coding:utf-8 -*- # # div.pl - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/06/16 21:18:54 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # use strict; use warnings; use Data::Dumper; use List::MoreUtils qw(:all); sub read_from_file($){ open FILE,$_[0]; map {int($_)} <FILE>; } my @xs = read_from_file $ARGV[0]; my @ys = read_from_file $ARGV[1]; my $it = pairwise { if($a == 0 && $b == 0){ print "NaN\n"; }else{ printf "%d\n",$a/$b*100; } } @xs,@ys;