加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用于处理CSV文件的Perl脚本,聚合分布在多个记录上的属性

发布时间:2020-12-15 23:26:59 所属栏目:大数据 来源:网络整理
导读:抱歉这个模糊的问题,我正在努力思考如何更好地说出来! 我有一个看起来像这样的CSV文件,只有更大的: 550672,1656372,1766153,1550672,2656372,2868194,2766151,2550672,3868179,3868194,3550672,4766153,4 第一列中的值是ID号,第二列可以描述为属性(因为缺
抱歉这个模糊的问题,我正在努力思考如何更好地说出来!

我有一个看起来像这样的CSV文件,只有更大的:

550672,1
656372,1
766153,1
550672,2
656372,2
868194,2
766151,2
550672,3
868179,3
868194,3
550672,4
766153,4

第一列中的值是ID号,第二列可以描述为属性(因为缺少更好的单词……). ID号550672具有属性1,2,3,4.任何人都可以指出我如何开始解决如何生成所有ID号码的字符串?我理想的输出将是一个新的csv文件,看起来像:

550672,1;2;3;4
656372,1;2
766153,1;4

等等

我非常喜欢Perl婴儿(只有3天大!)所以我真的很欣赏方向,而不是直接的解决方案,我决心学习这些东西,即使它花了我余下的时间!我尽我所能尽力调查它,虽然我认为我已经因为不知道该寻找什么而陷入困境.我能够读入并解析CSV文件(我甚至可以删除重复的值!)但是这真的是我为它丢弃的地方.任何帮助将不胜感激!

解决方法

我认为最好是我为你提供工作计划而不是一些提示.提示只能带你到目前为止,如果你花时间了解这段代码,它将为你提供良好的学习体验

在处理CSV数据时最好使用Text::CSV,因为已经为您完成了所有调试

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new;

open my $fh,'<','data.txt' or die $!;
my %data;
while (my $line = <$fh>) {
  $csv->parse($line) or die "Invalid data line";
  my ($key,$val) = $csv->fields;
  push @{ $data{$key} },$val
}

for my $id (sort keys %data) {
  printf "%s,%sn",$id,join ';',@{ $data{$id} };
}

产量

550672,1;2
766151,2
766153,1;4
868179,2;3

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读