сравнение файлов...

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 13:26:53

Хм.. вот задачка такая...

Есть значит два файла 10 и 20, в них построчно вбиты IP адреса, в файле 10 есть адреса которые так же есть и в 20, чем бы из 20 удалить адреса которые есть в 10?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: сравнение файлов...

Непрочитанное сообщение paradox » 2008-07-30 13:43:44

брр
а зачем удалять их с 20
если их уже нет в 10
)))?

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 14:15:42

paradox писал(а):брр
а зачем удалять их с 20
если их уже нет в 10
)))?
ЭЭЭ

Давай так.
В файле 10 есть список ипов.
В файле 20 есть список ипов.
В обоих файлах есть одинаковые ипы.
Как из файла 20 вычесть ипы которые уже есть в файле 10?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: сравнение файлов...

Непрочитанное сообщение paradox » 2008-07-30 14:28:44

tr и sad я незнаю))
поэтому поизвращался бы diff и grep

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 14:32:10

paradox писал(а):tr и sad я незнаю))
поэтому поизвращался бы diff и grep
чето я фтыкал фтыкал в ман дифа так и не нашел ничего :(
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-30 15:00:30

Код: Выделить всё

#!/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: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 15:09:08

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уг!

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: сравнение файлов...

Непрочитанное сообщение paradox » 2008-07-30 15:16:10

Так... и чо оно делает? Выдало список ипов... это кто?
)))
типа нашло ипы которых нет ни в 10 ни в 20?
:ROFL: :ROFL:

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 15:21:08

paradox писал(а):
Так... и чо оно делает? Выдало список ипов... это кто?
)))
типа нашло ипы которых нет ни в 10 ни в 20?
:ROFL: :ROFL:
:D

Походу выдало таблицу 20 без ипов 10, теперь как в перл передать параметры командной строки?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-30 16:18:14

Код: Выделить всё

#!/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";
первый параметр - файл 10, второй - 20

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение dikens3 » 2008-07-30 16:22:31

Код: Выделить всё

#!/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: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-30 16:30:49

а как diff сделать в формате патча, типа со сточками и вначале + -?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: сравнение файлов...

Непрочитанное сообщение paradox » 2008-07-30 16:32:38

Код: Выделить всё

diff -urN файл1 файл2

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-31 8:47:19

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уг!

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение manefesto » 2008-07-31 10:33:57

на перле пишут проги, на шеле скрипты...
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-31 10:34:18

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
На перле быстрее в разы отработало...
так извините, здесь вы в цикле запускаете sed и mv - огромные расходы на fork();
а в случае с перлом - все работает в одном процессе

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение dikens3 » 2008-07-31 10:45:23

так извините, здесь вы в цикле запускаете sed и mv - огромные расходы на fork();
а в случае с перлом - все работает в одном процессе
Вопросы качества программирования и т.п. обсуждаются на ЛОР, BASH.ORG и т.п.

Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-31 11:08:03

dikens3 писал(а):Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
Я не в коем случае не хотел поднимать вопросы качества программирования или инструментов для написания скриптов. Использование вызовов внешних программ - особенность шелл скриптов и никуда от них не уйдешь. Но это добавляет им простоты и гибкости.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-31 11:13:37

salvator писал(а):
dikens3 писал(а):Если что-то смешно, тогда можно отправиться туда и повеселиться. Лично мне что в голову пришло, то и написал. Тем более perl я не знаю. Да и сами скрипты не писал уже года 2.
Я не в коем случае не хотел поднимать вопросы качества программирования или инструментов для написания скриптов. Использование вызовов внешних программ - особенность шелл скриптов и никуда от них не уйдешь. Но это добавляет им простоты и гибкости.
+1 Спасибо, обидеть не хотел.

Теперь интересует конструкция сравнения файла 10 и 20 и выдергивания из файла 10 ипов которых нет в 20.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-31 13:27:10

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: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-31 13:46:00

salvator писал(а):
LMik писал(а):Теперь интересует конструкция сравнения файла 10 и 20 и выдергивания из файла 10 ипов которых нет в 20.
тот же скрипт фактически. аргументы местами поменяйте
я тоже так сначала подумал, а вот нифига :( Не работает так.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-31 14:39:57

LMik писал(а):я тоже так сначала подумал, а вот нифига :( Не работает так.
Тогда задачу уточните, works for me:

Код: Выделить всё

$ 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
Показывает те, которые есть в 10 и нет в 20

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение LMik » 2008-07-31 14:43:31

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уг!

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: сравнение файлов...

Непрочитанное сообщение manefesto » 2008-07-31 14:50:45

учи перл и регулярные выражения.
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
salvator
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-04-01 12:18:59
Откуда: Kiev, Ukraine

Re: сравнение файлов...

Непрочитанное сообщение salvator » 2008-07-31 14:53:05

o_O у меня так и работает?)))

Код: Выделить всё

$ 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";
В самом начале имена файлов были hardcoded