сравнение файлов...
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
сравнение файлов...
Хм.. вот задачка такая...
Есть значит два файла 10 и 20, в них построчно вбиты IP адреса, в файле 10 есть адреса которые так же есть и в 20, чем бы из 20 удалить адреса которые есть в 10?
Есть значит два файла 10 и 20, в них построчно вбиты IP адреса, в файле 10 есть адреса которые так же есть и в 20, чем бы из 20 удалить адреса которые есть в 10?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: сравнение файлов...
брр
а зачем удалять их с 20
если их уже нет в 10
)))?
а зачем удалять их с 20
если их уже нет в 10
)))?
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
ЭЭЭparadox писал(а):брр
а зачем удалять их с 20
если их уже нет в 10
)))?
Давай так.
В файле 10 есть список ипов.
В файле 20 есть список ипов.
В обоих файлах есть одинаковые ипы.
Как из файла 20 вычесть ипы которые уже есть в файле 10?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: сравнение файлов...
tr и sad я незнаю))
поэтому поизвращался бы diff и grep
поэтому поизвращался бы diff и grep
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
чето я фтыкал фтыкал в ман дифа так и не нашел ничегоparadox писал(а):tr и sad я незнаю))
поэтому поизвращался бы diff и grep

BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
Код: Выделить всё
#!/usr/bin/perl
use strict;
sub f2a($) {
open(F, shift) || die $!;
my @i = <F>;
chomp @i;
close(F10);
return @i;
}
my %h10 = map { ($_=>1) } f2a("10");
print join "\n", grep {!defined($h10{$_})} f2a("20");
print "\n";
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
Так... и чо оно делает? Выдало список ипов... это кто?salvator писал(а):Код: Выделить всё
#!/usr/bin/perl use strict; sub f2a($) { open(F, shift) || die $!; my @i = <F>; chomp @i; close(F10); return @i; } my %h10 = map { ($_=>1) } f2a("10"); print join "\n", grep {!defined($h10{$_})} f2a("20"); print "\n";
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: сравнение файлов...
)))Так... и чо оно делает? Выдало список ипов... это кто?
типа нашло ипы которых нет ни в 10 ни в 20?


- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
paradox писал(а):)))Так... и чо оно делает? Выдало список ипов... это кто?
типа нашло ипы которых нет ни в 10 ни в 20?
![]()

Походу выдало таблицу 20 без ипов 10, теперь как в перл передать параметры командной строки?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
Код: Выделить всё
#!/usr/bin/perl
use strict;
sub f2a($) {
open(F, shift) || die $!;
my @i = <F>;
chomp @i;
close(F10);
return @i;
}
my %h10 = map { ($_=>1) } f2a($1);
print join "\n", grep {!defined($h10{$_})} f2a($2);
print "\n";
- dikens3
- подполковник
- Сообщения: 4856
- Зарегистрирован: 2006-09-06 16:24:08
- Откуда: Нижний Новгород
- Контактная информация:
Re: сравнение файлов...
Код: Выделить всё
#!/bin/sh
file1="10"
file2="20"
tmp_file="tmp"
ip_file1=$(cat $file1)
for i in $ip_file1
do
sed /"$i"/D $file2 > $tmp_file
mv $tmp_file $file2
done
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
а как diff сделать в формате патча, типа со сточками и вначале + -?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: сравнение файлов...
Код: Выделить всё
diff -urN файл1 файл2
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
На перле быстрее в разы отработало...dikens3 писал(а):Код: Выделить всё
#!/bin/sh file1="10" file2="20" tmp_file="tmp" ip_file1=$(cat $file1) for i in $ip_file1 do sed /"$i"/D $file2 > $tmp_file mv $tmp_file $file2 done
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- manefesto
- Группенфюррер
- Сообщения: 6934
- Зарегистрирован: 2007-07-20 8:27:30
- Откуда: Пермь
- Контактная информация:
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
так извините, здесь вы в цикле запускаете sed и mv - огромные расходы на fork();LMik писал(а):На перле быстрее в разы отработало...dikens3 писал(а):Код: Выделить всё
#!/bin/sh file1="10" file2="20" tmp_file="tmp" ip_file1=$(cat $file1) for i in $ip_file1 do sed /"$i"/D $file2 > $tmp_file mv $tmp_file $file2 done
а в случае с перлом - все работает в одном процессе
- dikens3
- подполковник
- Сообщения: 4856
- Зарегистрирован: 2006-09-06 16:24:08
- Откуда: Нижний Новгород
- Контактная информация:
Re: сравнение файлов...
Вопросы качества программирования и т.п. обсуждаются на ЛОР, BASH.ORG и т.п.так извините, здесь вы в цикле запускаете sed и mv - огромные расходы на fork();
а в случае с перлом - все работает в одном процессе
Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
Я не в коем случае не хотел поднимать вопросы качества программирования или инструментов для написания скриптов. Использование вызовов внешних программ - особенность шелл скриптов и никуда от них не уйдешь. Но это добавляет им простоты и гибкости.dikens3 писал(а):Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
+1 Спасибо, обидеть не хотел.salvator писал(а):Я не в коем случае не хотел поднимать вопросы качества программирования или инструментов для написания скриптов. Использование вызовов внешних программ - особенность шелл скриптов и никуда от них не уйдешь. Но это добавляет им простоты и гибкости.dikens3 писал(а):Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
Теперь интересует конструкция сравнения файла 10 и 20 и выдергивания из файла 10 ипов которых нет в 20.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
LMik писал(а):Теперь интересует конструкция сравнения файла 10 и 20 и выдергивания из файла 10 ипов которых нет в 20.
Код: Выделить всё
#!/usr/bin/perl
use strict;
sub f2a($) {
open(F, shift) || die $!;
my @i = <F>;
chomp @i;
close(F10);
return @i;
}
my ($f1, $f2) = @ARGV;
my %h10 = map { ($_=>1) } f2a($f1);
print join "\n", grep {!defined($h10{$_})} f2a($f2);
print "\n";
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
я тоже так сначала подумал, а вот нифигаsalvator писал(а):тот же скрипт фактически. аргументы местами поменяйтеLMik писал(а):Теперь интересует конструкция сравнения файла 10 и 20 и выдергивания из файла 10 ипов которых нет в 20.

BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
Тогда задачу уточните, works for me:LMik писал(а):я тоже так сначала подумал, а вот нифигаНе работает так.
Код: Выделить всё
$ cat kk.pl
#!/usr/bin/perl
use strict;
sub f2a($) {
open(F, shift) || die $!;
my @i = <F>;
chomp @i;
close(F10);
return @i;
}
my ($f1, $f2) = @ARGV;
my %h10 = map { ($_=>1) } f2a($f1);
print join "\n", grep {!defined($h10{$_})} f2a($f2);
print "\n";
Код: Выделить всё
$ cat 10
1.2.3.4
5.4.3.2
5.6.7.8
n1.2.3.4
n5.4.3.2
n5.6.7.8
Код: Выделить всё
$ cat 20
1.2.3.4
1.2.3.4
1.2.3.4
1.2.3.4
1.2.3.4
1.2.3.4
5.4.3.2
5.6.7.8
5.4.3.2
5.6.7.8
5.4.3.2
5.6.7.8
5.4.3.2
5.6.7.8
5.4.3.2
5.6.7.8
5.4.3.2
5.6.7.8
Код: Выделить всё
$ ./kk.pl 20 10
n1.2.3.4
n5.4.3.2
n5.6.7.8
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: сравнение файлов...
Должно быть такsalvator писал(а): Показывает те, которые есть в 10 и нет в 20
Код: Выделить всё
в 10
10.11.12.13
10.11.12.14
10.11.12.15
10.11.12.16
Код: Выделить всё
в 20
10.11.12.13
10.11.12.14
Код: Выделить всё
10.11.12.15
10.11.12.16
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- manefesto
- Группенфюррер
- Сообщения: 6934
- Зарегистрирован: 2007-07-20 8:27:30
- Откуда: Пермь
- Контактная информация:
- salvator
- мл. сержант
- Сообщения: 88
- Зарегистрирован: 2008-04-01 12:18:59
- Откуда: Kiev, Ukraine
Re: сравнение файлов...
o_O у меня так и работает?)))
вы точно в правильном порядке запускаете и точно та версия скрипта?
В самом начале имена файлов были hardcoded
Код: Выделить всё
$ cat 10
10.11.12.13
10.11.12.14
10.11.12.15
10.11.12.16
Код: Выделить всё
$ cat 20
10.11.12.13
10.11.12.14
Код: Выделить всё
$ ./kk.pl 20 10
10.11.12.15
10.11.12.16
Код: Выделить всё
$ cat kk.pl
#!/usr/bin/perl
use strict;
sub f2a($) {
open(F, shift) || die $!;
my @i = <F>;
chomp @i;
close(F10);
return @i;
}
my ($f1, $f2) = @ARGV;
my %h10 = map { ($_=>1) } f2a($f1);
print join "\n", grep {!defined($h10{$_})} f2a($f2);
print "\n";