Глядя на входные и выходные данные, я вижу
- файл A представляет собой список ключей
- файл B содержит список комбинаций ключ + значение
- в выходных данных должны быть столбцы для каждого ключа
- если в строке файла B нет ключа, столбец должен быть пустым
Это может бытьлегко решается с помощью хеша, карты, dict, ... (выберите структуру данных для вашего любимого языка).Вот решение с использованием хэша в Perl:
- чтение каждой строки из файла B
- с разбивкой по
|
: возвращает список четного размера - список назначенийдля хэша: четная запись будет ключом, нечетная запись будет значением
- , распечатывает содержимое хэша
- , используя список ключей из файла A
- , еслиключ не существует, вставьте пустую строку
- , объедините столбцы с
|
, чтобы сгенерировать строку строки
#!/usr/bin/perl
use warnings;
use strict;
use autodie;
die "usage: $0 <headers> <data>\n"
if @ARGV < 2;
open(my $ifh, '<', $ARGV[0]);
chomp(my $headers = <$ifh>);
close($ifh);
my @headers = split(/\|/, $headers);
open($ifh, '<', $ARGV[1]);
print "$headers\n";
while (<$ifh>) {
chomp;
my %row = split(/\|/);
print join('|',
map { $row{$_} // '' } @headers
), "\n";
}
close($ifh);
exit 0;
Тестовый прогон:
$ cat fileA.txt
Name|Age|Department|Sex|
$ cat fileB.txt
Name|Dawson|Age|21|Sex|Male
Name|Deepak|Age|22|Department|EEE|Sex|Male
$ perl dummy.pl fileA.txt fileB.txt
Name|Age|Department|Sex|
Dawson|21||Male
Deepak|22|EEE|Male