Задачка
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Задачка
Приветствую!
Ходил недавно на одно собеседование и там задали загадку интересную, к которой я так и не смог найти решение. Вот думаю, а у нее вообще имеется решение или нет ?
Задача: Дан файл : /var/log/maillog вывести топ-10 адресов с которых отрпавлялась почта. Реализовать это все в 1 строку на шеле.
Ходил недавно на одно собеседование и там задали загадку интересную, к которой я так и не смог найти решение. Вот думаю, а у нее вообще имеется решение или нет ?
Задача: Дан файл : /var/log/maillog вывести топ-10 адресов с которых отрпавлялась почта. Реализовать это все в 1 строку на шеле.
Услуги хостинговой компании 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/
- f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
- Контактная информация:
Re: Задачка
В одну строку да еще и на чистом sh думаю если и можно то сложно, а если на каком нибудь bash думаю вполне реально, там прийдется просто скорее всего циклом считать количество писем, с одного адреса.
А в остальном вроде ничего сложного
Ну попробовали бы погуглить и привести свои задумки а народ бы помог где не справитесь, иначе в чем смысл, или вы хотите узнать может ли кто из форумчан такое сделать, скорее всего да ,но зачем?
А в остальном вроде ничего сложного

Ну попробовали бы погуглить и привести свои задумки а народ бы помог где не справитесь, иначе в чем смысл, или вы хотите узнать может ли кто из форумчан такое сделать, скорее всего да ,но зачем?
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308
- Syward
- мл. сержант
- Сообщения: 81
- Зарегистрирован: 2008-07-06 22:27:33
- Откуда: Mytischi
- Контактная информация:
Re: Задачка
Код: Выделить всё
#cat maillog | grep from= | awk '{print $7}' | grep '@' | sort -n | uniq -c|tail -n 10
21 from=<root@syward.myt>,
18 from=<syward@syward.myt>,
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
2 f_andrey Ога .. я вот тоже думал что данные нада где то хранить... и оказался не прав. Спать мне не давала спокойно эта задача, вот и спокойствия своего ради написал сюда и получил хороший ответ )
2 Syward Спасибо.
2 Syward Спасибо.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Задачка
Код: Выделить всё
perl -MData::Dumper -0x0a -lne ' $hash->{$1}++ while $_ =~ /from=\<([\w+\-\.]+\@[\w\-\.]+\.\w{2,3})(.*)\>/smg; END { print Dumper $hash }' /var/log/maillog
$VAR1 = {
'socializationrus5@gangfreekentucky.com' => 1,
'gavinz4@ratiobuy.com' => 1,
'officiatesp1@puntocina.com' => 1,
'www@thedj.org.ua' => 472,
'marauderin9@wildlifedinnerware.com' => 1,
'di@thedj.org.ua' => 88,
'backpacking@plantprocesses.com' => 1,
'root@apachejail.example.com' => 12,
'comprehendsrgd9@thomasmedlinappraisals.com' => 1,
'acclimatizinghjf602@tanning-chemicals.com' => 1,
'root@thedj.org.ua' => 777,
'aggressor@mobiture.com' => 1,
'fluidk6@sz-zp.com' => 1
};
Код: Выделить всё
perl -MData::Dumper -0x0a -lne ' $hash->{$1}++ while $_ =~ /(\d+\.\d+\.\d+\.\d+)/smg; END { print Dumper $hash }' /var/log/maillog
я что-то регулярные выражения призабыл ...
Последний раз редактировалось ProFTP 2010-02-20 20:52:17, всего редактировалось 3 раза.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Задачка
кстате, LizardOfOzz вы на ruby прогарммируете еще? почему не разу однострока не показывали?
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
На перле задача не довыполнена - нет сортировки и домен может быть и 4буквенным (.info например, и даже как тока что посмотрел 5ти... .travel).
- LizardOfOzz
- сержант
- Сообщения: 165
- Зарегистрирован: 2009-01-06 13:15:20
- Откуда: Станция Восток
- Контактная информация:
Re: Задачка
На мой взгляд, ruby придуман не для того, чтобы однострочные скрипты составлять.ProFTP писал(а):кстате, LizardOfOzz вы на ruby прогарммируете еще? почему не разу однострока не показывали?
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Задачка
я вот недавно увидел http://mjtsai.com/blog/2002/11/25/perl_ ... n_vs_ruby/LizardOfOzz писал(а):На мой взгляд, ruby придуман не для того, чтобы однострочные скрипты составлять.ProFTP писал(а):кстате, LizardOfOzz вы на ruby прогарммируете еще? почему не разу однострока не показывали?
тут написано что тоже можно писать в одну строку
там в коментах был пример, не могу сейчас найти
- LizardOfOzz
- сержант
- Сообщения: 165
- Зарегистрирован: 2009-01-06 13:15:20
- Откуда: Станция Восток
- Контактная информация:
Re: Задачка
Да я не сомневаюсь, что можно. Но зачем, если на sh вон как красиво получается?ProFTP писал(а):я вот недавно увидел http://mjtsai.com/blog/2002/11/25/perl_ ... n_vs_ruby/LizardOfOzz писал(а):На мой взгляд, ruby придуман не для того, чтобы однострочные скрипты составлять.ProFTP писал(а):кстате, LizardOfOzz вы на ruby прогарммируете еще? почему не разу однострока не показывали?
тут написано что тоже можно писать в одну строку
там в коментах был пример, не могу сейчас найти
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Задачка
у меня не получилось коротко написать сортровку по значениям, были только варианты длинные...iye писал(а):На перле задача не довыполнена - нет сортировки и домен может быть и 4буквенным (.info например, и даже как тока что посмотрел 5ти... .travel).
по этому взял вариант в гугле http://www.google.com.ua/#hl=uk&q=perl+ ... c956da6ac9
http://xpoint.ru/forums/programming/per ... 5117.xhtml
Код: Выделить всё
# perl -0x0a -lne '@$a= sort{$hash->{$b} <=> $hash->{$a}} keys %$hash; $hash->{$1}++ while $_ =~ /from=\<([\w+\-\.]+\@[\w\-\.]+\.\w{2,4})(.*)\>/smg; END { print $a->[$_] for (0..3) }' /var/log/maillog
root@thedj.org.ua
www@thedj.org.ua
di@thedj.org.ua
root@apachejail.example.com
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Задачка
LizardOfOzz писал(а): Да я не сомневаюсь, что можно. Но зачем, если на sh вон как красиво получается?
понятно, java, например, тоже не очень предназначеная для этого, хотя регулярные выражения там есть...
-
- рядовой
- Сообщения: 21
- Зарегистрирован: 2010-02-17 3:34:17
Re: Задачка
Задачка классическая.
Связка
применяется очень часто.
Кстати, в примере Syward не хватает последнего sort-a, на больших логах (с количеством адресов больше чем 2, как в примере) это проявится.
Попробуйте-ка лучше этот паровоз упростить, чтоб команд меньше было.
Интересно, получится ли?
Связка
Код: Выделить всё
cat лог | grep | cut | sort | uniq -c | sort -n
Кстати, в примере Syward не хватает последнего sort-a, на больших логах (с количеством адресов больше чем 2, как в примере) это проявится.
Попробуйте-ка лучше этот паровоз упростить, чтоб команд меньше было.

-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
У него просто uniq и sort местами поменяны, но это не важно .. главно общая мысль.
-
- рядовой
- Сообщения: 21
- Зарегистрирован: 2010-02-17 3:34:17
Re: Задачка
В том и дело, что важно. Главная фишка всей этой строки заключается как раз в комбинацииiye писал(а):У него просто uniq и sort местами поменяны, но это не важно .. главно общая мысль.
Код: Выделить всё
| sort | uniq -c | sort -n
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
http://www.opennet.ru/man.shtml?topic=u ... %D4%D8+man
Я слепой или всетаки нигде не написано что одинаковые строки должны идти последовательно ?
Я слепой или всетаки нигде не написано что одинаковые строки должны идти последовательно ?
-
- рядовой
- Сообщения: 21
- Зарегистрирован: 2010-02-17 3:34:17
Re: Задачка
Ну типа написано, но типа трактовать можно по-разному. Проще проверить на конкретном примере:iye писал(а):Я слепой или всетаки нигде не написано что одинаковые строки должны идти последовательно ?
Код: Выделить всё
overmind# cat /var/log/auth.log | grep Invalid | awk '{print $8}' | uniq | grep test
test
test1
test
testaccount
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
overmind# cat /var/log/auth.log | grep Invalid | awk '{print $8}' | sort | uniq | grep test
test
test1
testaccount
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
Значит должны быть отсортированы и я не прав. (Нет под рукой перла чтоб проверить (). Чтобы не плодить тем напишу тут.
Существует ли более компактное решение следующей задачи: Вывести все строки текстового файла, за исключением тех которые начинаются с пробела либо с символа решетки. Я сделал так:
Существует ли более компактное решение следующей задачи: Вывести все строки текстового файла, за исключением тех которые начинаются с пробела либо с символа решетки. Я сделал так:
Код: Выделить всё
cat file | grep -E '^(\S|[^#])'
- baton4eg
- сержант
- Сообщения: 274
- Зарегистрирован: 2009-10-11 14:36:35
- Контактная информация:
Re: Задачка
сталкнулся с задачкой, дан файл с мак-адрессами вида:
002618af3e71
002618af3e72
002618af3e73
002618af3e74
Нужно через каждые 4 символа поставить "точку" и получить в результате вид:
0026.18af.3e71
0026.18af.3e72
0026.18af.3e73
0026.18af.3e74
с седом игрался, не получилось
002618af3e71
002618af3e72
002618af3e73
002618af3e74
Нужно через каждые 4 символа поставить "точку" и получить в результате вид:
0026.18af.3e71
0026.18af.3e72
0026.18af.3e73
0026.18af.3e74
с седом игрался, не получилось
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" (c)
"Я ем руками, она вилкой и ножом, я бью вилкой и ножом, она руками" (с)
"Я ем руками, она вилкой и ножом, я бью вилкой и ножом, она руками" (с)
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
На перле будет выглядеть примерно так:
Юзать примерно так:
Код: Выделить всё
#!/usr/bin/perl -w
while (<>){
chomp;
print "substr($_,0,4)\.substr($_,3,4)\.substr($_,7,4)\n";
}
Код: Выделить всё
cat file_src | test.pl> file_dst
-
- ст. лейтенант
- Сообщения: 1374
- Зарегистрирован: 2010-02-05 0:21:40
Re: Задачка
Нда.. с арифметикой первого класса замечены серьезные проблемыiye писал(а):и даже как тока что посмотрел 5ти... .travel).

по поводу uniq - вроде понятным языком написано
The utility reads the specified input_file comparing adjacent lines, and writes a copy of each unique input line to the output_file If input_file is a single dash (`- ' ) or absent, the standard input is read. If output_file is absent, standard output is used for output. The second and succeeding copies of identical adjacent input lines are not written. Repeated lines in the input will not be detected if they are not adjacent, so it may be necessary to sort the files first.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Задачка
Спасибо. Читал перевод мана - там ничего такого не было (. По поводу вывода файла без решетек и начальных пробелов никто не хочет ничего сказать ? Может есть тоже какое то волшебное средство о которм я не знаю/забыл ?
- FreeBSP
- майор
- Сообщения: 2020
- Зарегистрирован: 2009-05-24 20:20:19
- Откуда: Москва
Re: Задачка
Код: Выделить всё
grep -E '^(\S|[^#])' file

Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!