最近、仕事でデータをインポートする作業が多くなっています。
1000件、2000件ともなると、エラーが置きたさいにデータの確認が大変です。
エラーのデータだけを抽出したcsvを出力することで、どのようなデータでERRORが起きるのかの把握で時間短縮ができるのでは?と思い、Perlで実装しました。
インポートの際には、下のようなログがでます。
SUCCESS line no. 1 ...
ERROR line no. 2 ...
実装としては、
*csvファイルとログテキストを同じ階層に配置させておく。
*ログテキストを読んで、ERRORの後の番号(行数)を配列として保存する
*CSVファイルを読んで、上で保存した番号(行数)のデータだけを新規のCSVとして出力する
#!usr/bin/perl
use strict;
use warnings;
## register files
print "log_txt : ";
chomp(my $log_txt = <STDIN>);
print "csv : ";
chomp(my $csv = <STDIN>);
print "exporter_csv : ";
chomp(my $export_csv = <STDIN>);
## data of culumn for csv
my @error_num = ("0");
## run
my $error_data = &error_data_number();
my $create_csv = &create_csv_with_error_data();
print "compleate!\n";
## stored number of error data
sub error_data_number {
open IN, '<', $log_txt or die "file open error: $!";
while(<IN>) {
chomp;
if (/(ERROR line no. )(\d+)/) {
push(@error_num, $2);
}
}
close IN;
}
## create csv with error data
sub create_csv_with_error_data {
open IN, '<', $csv or die "$csv file open error: $!";
open OUT, '>', $export_csv or die "$export_csv file open error: $!";
my @data = <IN>;
while (@error_num) {
my $fred = shift(@error_num);
print OUT $data[$fred];
}
close IN;
close OUT;
}
ここ最近Perlを勉強中ですが、たいていのことはPerlで実装できるんだな、と感じてきました。
Linuxでは標準でインストールされていて、使い勝手の良い言語なだけに、インフラ屋は、Perlを理解して使いこなすことで、作業効率が上がります。
勉強もかねて、作業を効率にさせてくれるものは、どんどん実装していこうと思います。
とくに自動化できるところは、押し進めていきたいです!
0 件のコメント:
コメントを投稿