Это должно быть сделано (сокращенное (R) и фиксированное (TM) by terdon):
#!/usr/bin/perl
use strict;
use warnings;
@ARGV==2 || die;
open(my $file1, $ARGV[0]) || die("Could not open \"$ARGV[0]\": $!");
open(my $file2, $ARGV[1]) || die("Could not open \"$ARGV[1]\": $!");
$"=","; #" (this comment exists only to prevent syntax hilighting from breaking)
while(my $l1 = <$file1>) {
chomp($l1);
my @f1 = split(",", $l1);
if(my $l2 = <$file2>) {
chomp($l2);
my @f2 = split(",", $l2);
if($f1[0] eq $f2[0]) {
print("@f1,@f2\n");
}
else {
push(@f1, "no_match");
seek($file2, -length($l2), 1);
print("@f1\n");
}
}
else {
push(@f1, "no_match");
print("@f1\n");
}
}
close($file1);
close($file2);
exit;
Поскольку файлы отсортированы, «file1.csv» является надмножеством «file2.csv» и в обоих файлах нет дубликатов строк:
Сравнивает следующие строки в обоих файлах; Если первое поле строки из «file1.csv» соответствует первому полю строки из «file2.csv», добавляет строку из «file2.csv» в строку из «file1.csv» (разделенная запятой) и печатает сгенерированную строку; иначе добавляет поле «no_match» в строку из «file1.csv», возвращает одну строку в «file2.csv» и печатает измененную строку из «file1.csv»; Если «file2.csv» не имеет больше строк, добавляет поле «no_match» в строку из «file1.csv» и печатает измененную строку из «file1.csv».Когда вы входите в графический интерфейс в Ubuntu, .bash_profile не будет считаться, но .profile будет (получен по sh). Поэтому, если вы поместите этот экспорт в .profile, войдите в систему снова, переменные среды должны быть доступны.
Также см. Http://mywiki.wooledge.org/DotFiles и https: // справку. ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile не будет считаться, но .profile будет (получен по sh). Поэтому, если вы поместите этот экспорт в .profile, войдите в систему снова, переменные среды должны быть доступны.
Также см. Http://mywiki.wooledge.org/DotFiles и https: // справку. ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile не будет считаться, но .profile будет (получен по sh). Поэтому, если вы поместите этот экспорт в .profile, войдите в систему снова, переменные среды должны быть доступны.
Также см. Http://mywiki.wooledge.org/DotFiles и https: // справку. ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile не будет считаться, но .profile будет (получен по sh). Поэтому, если вы поместите этот экспорт в .profile, войдите в систему снова, переменные среды должны быть доступны.
Также см. Http://mywiki.wooledge.org/DotFiles и https: // справку. ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile
не будет считаться, но .profile
будет (получен с помощью sh). Поэтому, если вы поместите этот экспорт в файл .profile
, войдите в систему снова, переменные среды должны быть доступны.
Также см. [D0] http://mywiki.wooledge.org / DotFiles и https://help.ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile
не будет считаться, но .profile
будет (получен с помощью sh). Поэтому, если вы поместите этот экспорт в файл .profile
, войдите в систему снова, переменные среды должны быть доступны.
Также см. [D0] http://mywiki.wooledge.org / DotFiles и https://help.ubuntu.com/community/EnvironmentVariables
Когда вы входите в графический интерфейс в Ubuntu, .bash_profile
не будет считаться, но .profile
будет (получен с помощью sh). Поэтому, если вы поместите этот экспорт в файл .profile
, войдите в систему снова, переменные среды должны быть доступны.
Также см. [D0] http://mywiki.wooledge.org / DotFiles и https://help.ubuntu.com/community/EnvironmentVariables