Как преобразовать два разграниченных ASCII-файла

Попробовать man sudo и взгляните на раздел FILES:

/var/lib/sudo Каталог, содержащий метки времени

И в SECURITY NOTES

sudo проверит владение своего каталога метки времени (/var/lib/sudo по умолчанию) [...]

(страницы справочника от Debian 6.0.4)

-3
17.09.2016, 05:02
1 ответ

Решение для Perl:

Проблема 1.

File1.dat читается в хеш, первый столбец является ключом, второй столбец является значением. Затем File2.dat обрабатывается, и значение от хеша вставляется в массив, представляющий значения на одной строке согласно ключу, взятому сначала (в Perl, нулевом) столбец.

#!/usr/bin/perl
use warnings;
use strict;

my %tab;

open my $F1, '<', 'File1.dat' or die $!;
while (<$F1>) {
    chomp;
    my ($key, $value) = split /\|/; # Here, the delimiter is mentioned.
    $tab{$key} = $value;
}

open my $F2, '<', 'File2.dat' or die $!;
while (<$F2>) {
    chomp;
    my @cols = split /\|/;
    splice @cols, 1, 0, $tab{$cols[0]};
    print join('|', @cols), "\n";
}

Можно получить подобный вывод со стандартом utils:

join -a2 -t'|' <(sort File1.dat) <(sort File2.dat) | sort -n

Проблема 2.

Помните, какую комбинацию полей Вы уже видели в хеше. Если комбинация является новой, распечатайте строку, иначе ничего не сделайте.

#!/usr/bin/perl
use warnings;
use strict;
use feature 'say';

my %seen;
while (<>) {
    chomp;
    my @fields = split /\|/, $_, 2;          # Only split into 2 fields.
    say unless exists $seen{$fields[1]};     # Do not print if already seen.
    undef $seen{$fields[1]};                 # Mark the key as seen.
}
1
28.01.2020, 05:19

Теги

Похожие вопросы