我有一个包含所有历史数据的文本文件。从第二天开始,我开始接收增量文件,这些文件可以具有新记录以及历史文件中的更新记录。

可以说我有历史数据:

ID|NAME|COUNTRY
----------
1|BRAD PITT|USA
2|GEORGE CLOONEY|USA
3|RAJESH KHANNA|INDIA

第二天我收到文件
ID|NAME|COUNTRY
----------
1|BRAD PITT|CANADA
4|DANIEL RADCLIFFE|UK

我想用创建一个新文件
ID|NAME|COUNTRY
----------
1|BRAD PITT|CANADA
2|GEORGE CLOONEY|USA
3|RAJESH KHANNA|INDIA
4|DANIEL RADCLIFFE|UK

ID是关键,分隔符在文件中始终是常量。

它可以使用任何数据库工具轻松实现,但是不幸的是,我的新Job需要使用我不太擅长的Scripting(Perl / Powershell)来实现。

感谢您的帮助。

最佳答案

自编写Perl以来已经有很长时间了,但这是一种非常容易学习的语言。

您想做的事情的基础是:

  • 加载原始数据
  • 使用新数据
  • 更新原始数据
  • 写出新文件

  • 下面是执行此操作的代码,但绝对应对其进行重构以适合您的直接需求,如果我们正在查看大型文件,那么这不是一个好例子。
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my $handle;
    my @lines;
    my $line;
    my @file_data = ();
    my @columns = ();
    
    open $handle, '<', "/tmp/sample.txt";
    chomp(@lines = <$handle>);
    close $handle;
    
    # remove header
    shift @lines;
    shift @lines;
    
    foreach $line (@lines){
            @columns = split("|",$line);
            @file_data[$columns[0]] = $line;
    }
    
    open $handle, '<', "/tmp/updated.txt";
    chomp(@lines = <$handle>);
    close $handle;
    
    # remove header
    shift @lines;
    shift @lines;
    
    foreach $line (@lines){
            @columns = split("|",$line);
            @file_data[$columns[0]] = $line;
    }
    
    # remove blank line
    shift @file_data;
    
    open $handle, '>', "/tmp/combined.txt";
    print $handle join("\n",@file_data);
    close $handle;
    

    关于perl - 在Perl或PowerShell中使用增量文件更新记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34209934/

    10-13 08:32
    查看更多