- 论坛徽章:
- 7
|
1 ge xiao lizi
perl abc.pl ./ test.CSV ./ , 1,2,3,4 3
perl abc.pl ./ test.CSV ./ , eNodeB,date,TIMESTAMP_SECOND,NONE,TIMESTAMP_MILLISEC 3- #!/usr/bin/perl
- use 5.022;
- my @argv =
- qw/数据源目录 文件名 转换目标目录 分隔符 提取字段列表 开始行/;
- die "usage: @argv\n" if @ARGV != @argv;
- my ( $dir, $file, $dir2, $sep, $list, $line ) = @ARGV;
- open my $DATA, '<', $dir . $file;
- open my $SAVE, '>', $dir2 . 'ConvertLog';
- my @list = split ',', $list;
- my @field = these();
- convert();
- #### SUB ####
- sub these {
- my $field = <$DATA>;
- chomp $field;
- split $sep, $field;
- }
- sub gimme {
- return map { $_ - 1 } @list if $list[0] =~ /^\d+$/;
- my %field = map { $_, $a++ } @field;
- my $NA = keys %field;
- map { $field{$_} // $NA } @list;
- }
- sub print_fields {
- if ( $list[0] =~ /^\d+$/ ) {
- say $SAVE join $sep, map { $_ // 'NA' } @field[@_];
- }
- else {
- say $SAVE join $sep, @list;
- }
- }
- sub convert {
- my @index = gimme();
- print_fields(@index) if $line < 2;
- <$DATA> for 3 .. $line;
- while (<$DATA>) {
- chomp;
- my @data = map /([^"]+)/, split $sep;
- say $SAVE join ',', map { $_ // '' } @data[@index];
- }
- }
- __DATA__
- eNodeB,date,HOUR,TIMESTAMP_MINUTE,TIMESTAMP_SECOND,TIMESTAMP_MILLISEC
- "10.0.0.36-M11375","20150730","2","45","9","161"
- "10.0.0.32-E11443","20150730","2","45","14","629"
- "10.0.0.36-M11375","20150730","2","45","9","161"
- "10.0.0.36-M11375","20150730","2","45","9","162"
- "10.0.0.36-M11375","20150730","2","45","9","163"
复制代码 |
|