我有一个包含所有历史数据的文本文件。从第二天开始,我开始接收增量文件,这些文件可以具有新记录以及历史文件中的更新记录。
可以说我有历史数据:
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/