The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Скрипт для совмещения строк, !*! Uche, (Shell скрипты) 11-Фев-17, 01:07  [ | | | ] [линейный вид] [смотреть все]
Доброго времени.
Имею некое отношение к составлению различных заданий для учащихся. В познавательных для себя целях решил использовать баш как основу для автоматизации некоторых процессов. Вот в чем суть, если абстрагировано. Имеется некий файл А в котором содержатся имена. Имеется некий файл Б, в котором имеются фамилии. Задача в том, чтобы создать из этих двух файлов файл В, где каждая из строк файла А совмещалась с каждой строкой файла Б, т.е. в файле В каждое имя было совмещено с каждой фамилией. Например
Файл А:
1
2
3

Файл Б:
а
б
в

Файл В (результат совмещения):









Сейчас на таком застрял на этом:
echo > C
STR1=`wc -l a`
NUM=0
S1=`cat A|head -$NUM`
S2=`cat B|head -$NUM`
until [ $NUM -lt $STR1 ]
do
let NUM=$NUM+1
echo "$S1$S2" >> C
done

И тут моих знаний пока не хватает, чтобы понять, как вместо построчного совмещения, получить строки каждая+каждая. Может кто подсказать?


Два дня ЛОР героически сражался с Rsync..., !*! chukcha, (Shell скрипты) 11-Дек-16, 00:49  [ | | | ] [линейный вид] [смотреть все]
Понадобилось решить, казалось бы, очень простую задачу - осуществить резервное копирование с диска на диск,
исключив из него папки и файлы, лежащие ниже некоторых задаваемых папок.
Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.
Первым делом быстренько накидал свой вариант

rsync    -avpH      \
--exclude="home/chukcha/.cache/mozilla/firefox/*"                    \
--exclude="home/chukcha/.config/chromium/Default/*"                  \
--exclude="home/chukcha/.cache/moonchild productions/pale moon/*"    \
/home   /mnt/sdc1/

Но я очень плохо разбираюсь в премудростях синтаксиса Rsync, поэтому не удивительно, что он не заработал.
Тогда обратился за помощью к легендарному ЛОРУ - https://www.linux.org.ru/forum/general/13066819

Два дня лоровцы героически сражались с этой задачей, но увы, не справились.
Сдается мне, уже и не справятся, не по зубам, видно, потому обращаюсь за помощью к вам.


PS. Маленькая просьба: только пожалуйста, не надо меня учить "как делать", как это пытались делать лоровцы, а просто приведите рабочий скрипт.
Хотя я понимаю, что учить и тыкать в маны гораздо легче, но когда доходит до конкретики, так все разбегаются в разные стороны.


  • ну ты это пойди и расскажи авторам rsync-aв --exclude пути всегда относительны b, !*! олхнтп (?), 01:02 , 11-Дек-16 (1)
    >Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.

    ну ты это пойди и расскажи авторам rsync-a

    в --exclude пути всегда относительны base dir

    rsync    -avpH      \
    --exclude="/chukcha/.cache/mozilla/firefox/*"                    \
    --exclude="/chukcha/.config/chromium/Default/*"                  \
    --exclude="/chukcha/.cache/moonchild productions/pale moon/*"    \
    /home   /mnt/sdc1/

    сообщить модератору +/ответить
  • https gist github com typomedia 6484306но там исключения отдельно вынесены, !*! Аноним (-), 06:24 , 11-Дек-16 (8)
    https://gist.github.com/typomedia/6484306

    но там исключения отдельно вынесены

    сообщить модератору +/ответить
  • rsync обрабатывает маски относительно корня копирования, поэтому самым простым в, !*! Freddy Cuper (?), 08:36 , 11-Дек-16 (9) +1
    rsync обрабатывает маски относительно корня копирования, поэтому самым простым выходом будет запись списка исключения в файл и использование простого скрипта, который вырежет корень из имён путей в этом списке, а потом запустит rsync с передачей изменённого набора правил директивой --exclude-from

    типа
    cat orig_exclude.txt| sed 's/^\/home//'>new_exclude.txt
    rsync    -avpH --exclude-from=new_exclude.txt /home   /mnt/sdc1/

    Второй вариант указать в качестве исходного пути "/" и добавить маски  "+ /home/" и "- *" в список исключений, при которых несмотря на указания пути "/" копироваться будет только /home.

    сообщить модератору +1 +/ответить


Создать скрипт помогите, !*! pilotik, (Shell скрипты) 17-Янв-17, 14:46  [ | | | ] [линейный вид] [смотреть все]
Есть файл следующего содержания

5.000000 90.000000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
10.000000 90.000000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

есть переменные x = 20.2 и у =30.3.
необходимо найти первое и второе слово в строке и сложить с переменными
в итоге должны получить файл

25.200000 120.300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
30.200000 120.300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000


  • man exprman bcman printfдля особых ценителей возможно на awk, !*! universite (ok), 22:39 , 17-Янв-17 (1)
    > Есть файл следующего содержания
    > 5.000000 90.000000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
    > 10.000000 90.000000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
    > есть переменные x = 20.2 и у =30.3.
    > необходимо найти первое и второе слово в строке и сложить с переменными
    > в итоге должны получить файл
    > 25.200000 120.300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
    > 30.200000 120.300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

    man expr
    man bc
    man printf

    для особых ценителей возможно на awk

    сообщить модератору +/ответить


компановка скрипта, !*! Alex, (Shell скрипты) 20-Янв-17, 13:00  [ | | | ] [линейный вид] [смотреть все]
подскажите, как бы вывод cat в notify-send запихнуть ?

пробую так:
$ cat file | notify-send
No summary specified.

соответственно получаю ..

запуск процесса и получение его PID, !*! hamel1on, (Perl) 20-Янв-17, 11:36  [ | | | ] [линейный вид] [смотреть все]
выполняю $procnum=`redir --lport=0 --caddr=$srcip --cport=$port >/dev/null &`;
$procnum пуст.
подскажите как заставить работать?
sed вывести переменную содержащую знаки пунктуации., !*! DiJey, (Shell скрипты) 19-Янв-17, 16:59  [ | | | ] [линейный вид] [смотреть все]
Подскажите, кто знает сравниваю строки
[ ! "$BD_CFG_YML" == "$CONTEXT" ] && sed -i "s/dbConnString: .*/dbConnString: ${CONTEXT}/g" file

как вставить ${CONTEXT} если в нем присутствуют управляющие символы т.е. могут в строке содержатся / " т.п.

помогите с простенькой задачкой, !*! visitor, (Perl) 14-Янв-17, 19:24  [ | | | ] [линейный вид] [смотреть все]
всем привет,

есть 2 файла:
1. список мыл
gagag@domain1.com
jdjdjd@domain2.com
...
kdkdk@domainX.com

2. список доменов:
domain1.com
domain2.com
...
domainX.com

задача сосотоит в том чтобы выкинуть все мыла из листа 1 домены которых совпали с доменами из листа 2

grep -v работает ужасно долго при больших листах - уверен перл справиться намного быстрее.

Спасибо!

  • Это в каком классе сейчас такие примитивные задачки сейчас задают , !*! Led (ok), 21:27 , 14-Янв-17 (1)
    Это в каком классе сейчас такие примитивные задачки сейчас задают?
    сообщить модератору +/ответить
  • gt оверквотинг удален Иногда скорость не имеет решающего значения Есть задачи, !*! Square1 (?), 22:35 , 14-Янв-17 (2)
    >[оверквотинг удален]
    > 2. список доменов:
    > domain1.com
    > domain2.com
    > ...
    > domainX.com
    > задача сосотоит в том чтобы выкинуть все мыла из листа 1 домены
    > которых совпали с доменами из листа 2
    > grep -v работает ужасно долго при больших листах - уверен перл справиться
    > намного быстрее.
    > Спасибо!

    Иногда скорость не имеет решающего значения. Есть задачи, решение которых важно в принципиальном плане а не в частной реализации.

    Что же до скорости....
    Самое быстрое решение (если объем файлов действительно велик) - будет загнать оба списка в базу данных а потом сконструировать примитивный select ... like in (select ...)

    Если объем файлов слишком велик для этого метода- то использовать шардинг.

    Если объем файлов реально велик - то вероятно надо использовать MapReduce.

    Что же до перла - то загрузка в перл больших объемов данных приводит к существенному потреблению памяти. Это надо помнить.

    сообщить модератору +/ответить
  • Ну что же, сам напросился - получай code usr bin perlopen DOMAIN, path t, !*! михалыч (ok), 08:45 , 15-Янв-17 (3)
    Ну что же, сам напросился - получай ))

    #!/usr/bin/perl

    open (DOMAIN, /path/to/file/domain);
    @domain{<DOMAIN>}=();

    open (MAIL, /path/to/file/mail);
    while (<MAIL>) {
        /^.*\@(.*)/;
        print unless exists $domain{"$1\n"};
    }


    насчет жручести памяти в перле будем считать тебя предупредили выше
    сообщить модератору +/ответить
Домашнее задание на Python, !*! Dimon2016, (Python) 27-Апр-16, 08:54  [ | | | ] [линейный вид] [смотреть все]
Устраиваюсь на работу в одну компанию, так вот мне дали задание (сроки выполнения неделя) написать программу на Python по парсингу лога, будущий работодатель в курсе из моего резюме, что я не знаю Python да и вообще очень слаб в программировании, но не смотря на это мне все равно поставили задачу.

Имя входного файла: input .txt
Имя выходного файла: output. txt
Сервис состоит из фронтенда и бекендов. Бекенды бывают нескольких типов. Для увеличения отказоустойчивости бекенды одного типа реплицированы и составляют группу реплик (далее ГР). Бекенды из одной ГР одинаковы, и для формирования выдачи фронтенду достаточно получить от¬вет хотя бы с одного бекенда из каждой ГР. Фронтенд может сделать несколько попыток обращения к бекендам ГР, пока не получит результат.
У фронтенда есть три фазы обработки запроса:
1) Опрос бекендов
2) Мерджинг результатов, полученных с бэкендов
3) Отправка результатов пользователю      
В случае, когда фаза опроса бекендов занимает слишком много времени, фронтенд может при¬нудительно завершить опрос и перейти к фазе мерджинга результатов с неполным набором данных. В процессе работы фронтенд пишет в лог файл события, возникающие при обработке запроса. Вам нужно по данному логу событий посчитать:
1.    95-й перцентиль времени обработки запросов фронтендом
2.    Найдите 10 запросов, в которых фаза отправки результатов пользователю была максимальной. В качестве ответа выдайте 10 идентификаторов запросов.
3.    Для каждого бекенда, отметившегося в логе, посчитайте количество обращений к нему, коли¬чество и типы ошибок, возникших при работе с ним.
4.    Посчитайте количество запросов к фронтенду на которые фронтенд не смог собрать данные со всех ГР.

                       Формат входных данных
Входной файл состоит из строчек в формате: <время события> <идентификатор запроса на фронтенд> <тип события> [<дополнительные параметры>]
Разделителем полей выступает символ табуляции.
Строки отсортированы по времени события — UNIX timestamp в микросекундах. Идентификатор запроса это уникальное целое число. Отфильтровав лог по записям с выбран¬ным идентификатором запроса можно узнать всё об обработке соответствующего пользовательского запроса.
Типы событий:
StartRequest
Начало обработки запроса
BackendConnect
Установка tcp соединения с бекендом.
Дополнительные параметры: <номер ГР> <URL запроса на бекенд>
BackendRequest
Отправка запроса на бекенд. Дополнительные параметры: <номер ГР>
BackendOk
Отметка успешного получения ответа с бекенда. Работа с ГР завершается. Дополнительные параметры: <номер ГР>
BackendError
Ошибка работы с бекендом. Следует после BackendConnect или BackendRequest. Дополнительные параметры: <номер ГР> <строка с текстом возникшей ошибки>
StartMerge
Означает конец фазы опроса бекендов и начало фазы мерджа результатов.
Start SendResult
Означает конец фазы мерджа и начало отправки результата пользователю.
Finis hRequest
Конец обработки запроса.

Формат выходных данных
Выведите в свободной фоме ответ на поставленные вопросы.
Время обработки пользовательского запроса вычисляется как время между событиями StartRequest и FinishRequest. Подсмотреть, что такое 95-й перцентиль можно тут: ru.wikipedia.org/wiki/Квантиль
Время ответа пользователю можно вычислить как разницу времени между событиями Start SendResult и FinishRequest.
Бекенды, с которыми производилась работа можно узнать разобрав URL в событии BackendConnect. В качестве типа ошибки можно использовать строковое представление ошиб¬ки в событии BackendError.
Запросы, на которые ответили не все ГР не имеют событий BackendOK хотя бы для одной из своих ГР.
                              Система оценки
Мы ожидаем, что решение будет оформленно на Python 2.7.
Модно пользоваться любыми библиотеками с pypi, но не забудьте описать зависимости в pip-requirements.txt Также, мы будем признательны, если, при прочих равных, вы выберете pure python библиотеки себе в зависимости — нам это сильно упрощает проверку.
Вобщем случае событийный лог может быть большим, программа не должна зачитывать весь лог в память.
Постарайтесь оптимизировать свою программу по памяти и процессору.

И приложены несколько файлов с логами, вот примерные строчки одного из них:

1390137366792361    3    BackendConnect    9    http://backend9-011.yandex.ru:1612/search?
1390137366792367    3    BackendConnect    19    http://backend19-004.yandex.ru:1247/search?
1390137366792392    2    BackendConnect    5    http://backend5-008.yandex.ru:1611/search?
1390137366792407    3    BackendConnect    16    http://backend16-014.yandex.ru:1120/search?
1390137366792410    3    BackendConnect    1    http://backend1-006.yandex.ru:1924/search?
1390137366792421    2    BackendConnect    15    http://backend15-013.yandex.ru:1334/search?
1390137366792467    3    BackendConnect    17    http://backend17-011.yandex.ru:1197/search?
1390137366792469    3    BackendConnect    6    http://backend6-004.yandex.ru:1347/search?
1390137366792480    3    BackendConnect    11    http://backend11-013.yandex.ru:1457/search?
1390137366792481    3    BackendConnect    0    http://backend0-007.yandex.ru:1080/search?
1390137366792516    3    BackendConnect    3    http://backend3-007.yandex.ru:1203/search?
1390137366792517    4    StartRequest
1390137366792524    3    BackendConnect    8    http://backend8-006.yandex.ru:1373/search?
1390137366792622    3    BackendConnect    12    http://backend12-006.yandex.ru:1028/search?
1390137366792627    3    BackendConnect    4    http://backend4-009.yandex.ru:1959/search?
1390137366792662    3    BackendConnect    10    http://backend10-013.yandex.ru:1888/search?
1390137366792731    3    BackendConnect    5    http://backend5-001.yandex.ru:1268/search?
1390137366792745    3    BackendConnect    18    http://backend18-004.yandex.ru:1605/search?
1390137366792896    3    BackendConnect    14    http://backend14-006.yandex.ru:1730/search?
1390137366794324    4    BackendConnect    13    http://backend13-006.yandex.ru:1103/search?
1390137366794346    4    BackendConnect    18    http://backend18-003.yandex.ru:1852/search?
1390137366794361    4    BackendConnect    12    http://backend12-012.yandex.ru:1910/search?
1390137366794364    4    BackendConnect    17    http://backend17-010.yandex.ru:1518/search?
1390137366794374    4    BackendConnect    19    http://backend19-011.yandex.ru:1276/search?
1390137366794379    4    BackendConnect    11    http://backend11-013.yandex.ru:1457/search?
1390137366794409    4    BackendConnect    6    http://backend6-001.yandex.ru:1590/search?
1390137366794438    4    BackendConnect    2    http://backend2-008.yandex.ru:1199/search?
1390137366794448    4    BackendConnect    7    http://backend7-005.yandex.ru:1103/search?
1390137366794461    4    BackendConnect    8    http://backend8-010.yandex.ru:1171/search?
1390137366794565    4    BackendConnect    9    http://backend9-008.yandex.ru:1060/search?
1390137366794597    4    BackendConnect    5    http://backend5-004.yandex.ru:1121/search?
1390137366794602    4    BackendConnect    4    http://backend4-007.yandex.ru:1172/search?
1390137366794628    4    BackendConnect    0    http://backend0-007.yandex.ru:1080/search?
1390137366794657    4    BackendConnect    15    http://backend15-012.yandex.ru:1776/search?
1390137366794659    4    BackendConnect    14    http://backend14-009.yandex.ru:1036/search?
1390137366794662    4    BackendConnect    16    http://backend16-008.yandex.ru:1349/search?
1390137366794694    4    BackendConnect    3    http://backend3-008.yandex.ru:1008/search?
1390137366794727    4    BackendConnect    10    http://backend10-005.yandex.ru:1086/search?
1390137366794829    4    BackendConnect    1    http://backend1-010.yandex.ru:1746/search?
1390137366797781    5    StartRequest

Помогите кто чем может, хотя бы с разработкой алгоритма на псевдокоде, буду очень признателен любой помощи!

  • ты не пробовал искать работу в которой понимаешь или ты решил что кто-то буде, !*! Pahanivo (ok), 09:14 , 27-Апр-16 (1) +2
    > написать программу на Python по парсингу лога
    > и вообще очень слаб в программировании, но не смотря на это
    > мне все равно поставили задачу.

    ты не пробовал искать работу в которой "понимаешь"? или ты решил что кто-то будет делать за тебя работу и тратить время, а ты будешь получать деньги?
    нагло и тупо

    сообщить модератору +2 +/ответить
  • О тестовое в яндекс Не считай перцентиль через math, им не понравится , !*! Nicknnn (ok), 14:38 , 01-Май-16 (13)
    О! тестовое в яндекс. Не считай перцентиль через math, им не понравится.
    сообщить модератору +/ответить


строка в обратном порядке без sed и awk, !*! grizzlynet, (Shell скрипты) 05-Дек-16, 09:27  [ | | | ] [линейный вид] [смотреть все]
Всем привет! Есть у кого варианты вывода echo "10:9:8:7:6:5:4:3:2:1" > file, без использования sed и awk, в обратно порядке. Результат 1:2:3:4:5:6:7:8:9:10 ?


Cron + shell, !*! SuicideMouse, (Shell скрипты) 19-Дек-16, 09:34  [ | | | ] [линейный вид] [смотреть все]
Не работает shell скрипт в кроне
Вот shell file:
#!/bin/sh
HOST='server ip'
USER='user'
PASSWD='password'
FILE ='*.mbz'

chmod - R 0777 /var/www/html/moodle/backup

Ftp -n $HOST <<EOF
quote USER $USER
quote PASS $PASSWD
cd moodle_backup
Put $FILE
Quit
EOF
Exit 0


Теперь и сам крон:crontab -e

20 8 * * * /usr/bin/sh /home/sysadmin/test.sh


В чем проблема? В ручную запускается, через крон нет

Найти юзера, что зашел в систему локально, !*! Vasya_Alibabaevich, (Разное) 15-Дек-16, 23:57  [ | | | ] [линейный вид] [смотреть все]
В общем, сабж. Имеется фоновый процесс, запускающийся при включении компьютера. Ему следует найти того пользователя, который зашел в систему локально, т.е. того, кто сидит за этим компьютером, двигает мышью, стучит по клавишам и смотрит в его монитор.
Я сначала думал отличить его от остальных по локальному ip, но уж как-то коряво получается.
Наверняка есть более простой и прямой способ.


Найти строку в файле и удалить предыдущую перед ней, !*! XaKoN, (Shell скрипты) 12-Дек-16, 17:31  [ | | | ] [линейный вид] [смотреть все]
Собственно сабж. Есть csv файл:

Comprehensive Order Report
«Order Type»,«Operating Unit»
«Standard - DIRECT A», «International Business Machines Corporation»
«Standard - DIRECT B», «International Business Machines Corporation»
«Standard - DIRECT C», «International Business Machines Corporation»
«Standard - DIRECT D», «International Business Machines Corporation»

Переодически в качестве первой строки в нём появляется строка Comprehensive Order Report. Необходимо удалить именно её, когда она есть в файле. «Order Type»,«Operating Unit» - название полей и всегда содержатся в файле т.е. можно опираться на них.

Пока вижу решение только двумя способами: 1) найти «Order Type»,«Operating Unit» и вывести их всё что дальше в файле до его конца.
2) найти «Order Type»,«Operating Unit» и удалить всё что выше.

Пробовал использовать sed для этих целей, но ничего не вышло.

вставить перевод  строки через каждые 5 слов, !*! Badaboom, (Shell скрипты) 25-Ноя-16, 15:25  [ | | | ] [линейный вид] [смотреть все]
всем привет
пишу скрипт отслеживающий превышение очереди на выход почтового сервера
OUT=exim -bp| exiqsumm
в $OUT весь выхлоп в одну строку
если слать алерт по почте, плохо читаемо.
собственно вопрос: как вставить с помощью sed или awk в строку перевод строки каждые пять слов (в общем случае символы ограниченные пробелами)?
если есть варианты получше отлова превышения порога, буду рад любому совету.


C Перенаправить файл в дочерний процесс обработать tail и, !*! mesmeridze, (C/C++) 15-Ноя-16, 08:35  [ | | | ] [линейный вид] [смотреть все]
Добрый день коллеги.
Поставили такую задачу. Нужно из родительского в дочерний процесс передать некий файл, там его пропустить чере more / head / tail кому что нравится. Затем полученный вывод вернуть родителю ну и родитель собственно должен этот текст вывести на экран.
(институтская задача не бейте тапками)

Если я правильно понял использовать нужно fork, в родителе файл можно открыть при помощи fopen и передать дескриптор дочернему процессу. Поскольку как я читал дескриптор будет доступен последнему, то остаётся решить вопрос как это вот всё скормить перечисленным утилитам, а потом весь этот вывод вернуть родителю. Я могу это сделать через system, но чует моё сердце есть не рагульский вариант.

Подскажите пожалуйста как правильно это сделали Вы.
Спасибо

Проблема с регулярными выражениями в bash-скрипте, !*! drew53, (Shell скрипты) 13-Ноя-16, 20:26  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте, гуру!
Прошу сильно не пинать, так как, можно сказать, только начал изучать bash-scripting, а регулярные выражения для меня -- так это просто творение сотоны и язык не этой планеты...)))))

Пытаюсь решить простую (как мне казалось) задачку: есть переменная, содержащая строчные буквы, завершаемые цифрами на конце. Все без пробелов, например, blabla123. Нужно получить порядковый номер blabl'ы, то есть цифровой хвост.

Бьюсь полдня, ничего не понимаю((( Вобщем, объясните, пожалуйста, кто-нибудь: следующий код дает вот какие результаты.


stringZ=abcABC123ABCabc
echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`

stringZ=blabla12
echo `expr match "$stringZ" '\([a-z]\)'`
echo `expr match "$stringZ" '\([a-z]\+\)'`
echo `expr match "$stringZ" '\([0-9]\)'`
echo `expr match "$stringZ" '\([0-9]\+\)'`

Результат работы скрипта:
abcABC1
b
blabla
<пустая строка>
<пустая строка>

То есть, шаблон [0-9] в первом примере (честно слизанном с Вашего портала =) находит цифры в строке. Шаблон [a-z] в моем случае также работает верно, и даже [a-z]+. А вот ни[0-9], ни [0-9]+ в моем случае цифирь не видит "наглухо"(((((

Я понимаю, конечно, что ошибка в ДНК))), но в какое место скрипта она реплицировалась??? Всю голову сломал((( Выручайте?!
Заранее благодарю!

Работа со строками Bash, !*! kampaiification, (Shell скрипты) 20-Окт-16, 23:39  [ | | | ] [линейный вид] [смотреть все]
Дорогие форумчане, возникла резкая необходимость. В этих делах не в зуб ногой.

Файл с содержимым показывает вызов функции mail() в определённом файле:

user1 (mail) (dsbsmo4@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user3 (mail) (jfen835@list.ru) /home/user3/data/www/admin/system/cxmxmc.php
user3 (site) /home/user3/data/www/site.ru/index.php
user2 (mail) (hrj34fucr@list.ru) /home/user2/data/www/fake/root.php
user1 (mail) (r834fnjv@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php
user2 (site) /home/user1/data/www/order.ru/index.php
user2 (mail) (segkfwmkf@list.ru) /home/user1/data/www/sfmve/dskjfs/.404.php
user2 (mail) (dsfsdsd@list.ru) /home/user1/data/www/fdgkgd/43fmke.php
user2 (site) /home/user1/data/www/fiction/index.php
user1 (mail) (ewriwr43n@list.ru) /home/user1/data/www/site/assets/owl.php
user1 (mail) (sdmn348934@list.ru) /home/user1/data/www/mail/postform.php
user1 (mail) (pweneife@list.ru) /home/user1/data/www/wp-config/erwkcwkcw.php

Посчитать количество раз вызова функции mail() в файле для всех пользователей.

Вывести только:
count USER PATH
(взять за «ключ» «USER PATH»)

Например:
3 user1 /home/user1/data/www/wp-config/erwkcwkcw.php

какой применить алгоритм?!, !*! вотак, (Разное) 07-Окт-16, 09:40  [ | | | ] [линейный вид] [смотреть все]
Делаю логическую игру, у меня есть некоторое множество двухзначных цифр.
Мне нужно выделить из этого множества максимальное количество возможных сочетаний.
Сочетания фиксированы, вот такие:
1. пара = ХХ, ХХ (в множестве есть две одинаковые цифры 11, 11)
2. тройка = ХХ, ХХ, ХХ
3. четверка = ХХ, ХХ, ХХ, ХХ
4. тройная последовательность = ХХ, ХХ + 1, ХХ + 2 (три цифры например 22, 23, 24)

Есть же алгоритмы на комбинаторику, где мне достаточно определить собственные условия?

вот похожее но не то
http://www.aconnect.de/friends/editions/computer/combinatori...

centos iopl(3) Operation not permitted, !*! serge, (C/C++) 03-Окт-16, 20:46  [ | | | ] [линейный вид] [смотреть все]
Пытаюсь прочитать содежимое cmos.
На fedora и ubuntu ok.
На centos7 - вызовы iopl(3) и ioperm(...) приводят к "Operation not permitted"
CAPS_SYS_RAWIO не помогает.

Подскажите, ЧЯДНТ?

Или пользовать /dev/ports ?

bash-скриптинг, !*! Hogward, (Shell скрипты) 30-Сен-16, 14:23  [ | | | ] [линейный вид] [смотреть все]
Входная информация:
Есть каталог (пример) /home/usr/var/ в котором лежит 300 файлов. Периодически возникает необходимость обновлять эти файлы, создав бэкапы старых. Хочу автоматизировать сей нудный процесс до нажатия одной кнопки. Таким образом у меня есть список файлов list.txt в котором указаны интересующие меня файлы (количество любое, файл заполняется через ls). На основании этого файла хочу выбрать существующие файлы из /home/usr/var/, скопировать их в /home/usr/var_old/, после чего подменить на новые. Перерыл кучу информации, нашел несколько работающих вариантов в случаях, когда есть полный путь до файлов, но так и не понял, как написать запрос поиска файлов на основании их имен в текстовом документе. Поиск осуществляется именно через текстовый документ, т.к. он формируется на удаленном сервере, после чего доставляется на необходимый.
PS из плюсов - все файлы имеют вид "document"; "item" и пр. Без пробелов, спецсимволов и расширений.

Копирование файлов планирую осуществлять вот таким образом:
cat /home/usr/var/to_backup.txt | xargs -IFILE cp FILE  /home/usr/var_old/
где to_backup.txt - файл, созданный на основе list.txt, но с полными путями до файлов.

Почти уверен, что проблему можно решить обычным find-ом, но не хватает скила правильно это сделать.

  • gt оверквотинг удален while read f do echo fdone list txt, !*! Виктор (??), 23:27 , 30-Сен-16 (1) +1
    >[оверквотинг удален]
    > осуществляется именно через текстовый документ, т.к. он формируется на удаленном сервере,
    > после чего доставляется на необходимый.
    > PS из плюсов - все файлы имеют вид "document"; "item" и пр.
    > Без пробелов, спецсимволов и расширений.
    > Копирование файлов планирую осуществлять вот таким образом:
    > cat /home/usr/var/to_backup.txt | xargs -IFILE cp FILE  /home/usr/var_old/
    > где to_backup.txt - файл, созданный на основе list.txt, но с полными путями
    > до файлов.
    > Почти уверен, что проблему можно решить обычным find-ом, но не хватает скила
    > правильно это сделать.

    while read f; do
      echo $f
    done <list.txt

    сообщить модератору +1 +/ответить
  • причем тут find, когда, как ты сам пишешь, тебе известны их имена и пути ост, !*! Pahanivo (ok), 11:03 , 03-Окт-16 (2)
    причем тут find, когда, как ты сам пишешь, тебе известны их имена и пути ... остается только проверить их существование ...
    попытайся сформулировать задачу хотя бы для себя - глядишь и сам разберешься.
    сообщить модератору +/ответить
: Детская теория чисел, !*! pavlinux, (Shell скрипты) 27-Сен-15, 00:06  [ | | | ] [линейный вид] [смотреть все]
Объяснить, почему два двузначных числа, в сумме образующих 100,
при перестановке цифр всегда дают сумму 109 ?

51+49 = 100; 15+94 = 109;
23+77 = 100; 32+77 = 109;
...
и т.д.

И написать скрипт/программу, реализующий алгоритм этого объяснения.
В программе запрещено использовать числа 100 и 109, как константы,
так и в виде временных переменных.  



Нормальный ли код получился? (Переворот строки Си)., !*! dcc0, (C/C++) 14-Сен-16, 20:10  [ | | | ] [линейный вид] [смотреть все]
Тренировался, нужно было написать функцию переворачивания строки, strrev не хотелось использовать. Нету ли ничего шибко крамольного в коде?

#include <stdio.h>
const char *prnt(int k, char *a) {
char  new_s[k]={0};
int i=0;
    while(k !=0 ) {
     k--;
        new_s[i]=a[k];
     ++i;

    }
    printf("%s", new_s);
        return (new_s);
}

main (int argc, char *argv[]) {
char *a=argv[1];
    if(argv[1]==0) {
        return 0;
    }
    int k=0;
    while (a[k] != 0) {
k++;    
    }
    prnt( k, a);
}

  • gt оверквотинг удален Этот код не собирается - variable-sized массивы нельзя и, !*! f2404 (ok), 21:15 , 14-Сен-16 (1)
    >[оверквотинг удален]
    >  char *a=argv[1];
    >  if(argv[1]==0) {
    >   return 0;
    >  }
    >  int k=0;
    >  while (a[k] != 0) {
    > k++;
    >  }
    >  prnt( k, a);
    > }

    Этот код не собирается - variable-sized массивы нельзя инициализировать.

    Кроме того, вы возвращаете из функции prnt() указатель на локальную переменную - так делать нельзя. Но вам и не нужно ничего возвращать в данном случае.

    Ну и стиль хромает, мелких замечаний можно много сделать.

    сообщить модератору +/ответить


си system и переменные, !*! dcc0, (C/C++) 17-Сен-16, 10:32  [ | | | ] [линейный вид] [смотреть все]
Я, наверное, надоел уже вам тут.
У меня еще два вопроса.
Верно ли я понимаю, что в Си при вызове system невозможно передать переменную?
Нашёл такой фокус со sprintf, но, как я понял, - это уже функция с++.

Второй вопрос: в php system возвращает  результат работы и с этим результатом возможно работать как с переменной.
Я так понимаю, что такой фокус не пройдет в Си.
Или я ошибаюсь?
Благодарен вам заранее за выдержку и терпение, отсутствие ехидства над новичком.

Printf цикл отступ, !*! dcc0, (C/C++) 13-Сен-16, 13:09  [ | | | ] [линейный вид] [смотреть все]
В чистом Си как-то можно динамически изменять отступ в цикле при выводе на экран через printf?
Допустим:
int a = 1;
a++;
while (a < 10) {
printf("d");
}
Вместо 12 как-то можно подставить переменную а?
  • Можно выводить пробелы в цикле если я правильно понял задачу for int j 0 , !*! f2404 (ok), 16:00 , 13-Сен-16 (1)
    > В чистом Си как-то можно динамически изменять отступ в цикле при выводе
    > на экран через printf?
    > Допустим:
    > int a = 1;
    > a++;
    > while (a < 10) {
    > printf("d");
    > }
    > Вместо 12 как-то можно подставить переменную а?

    Можно выводить пробелы в цикле (если я правильно понял задачу)
      for (int j = 0; j < a; ++j) printf(" ");

    сообщить модератору +/ответить
  • Если я Вас правильно понял, то вы спрашиваете про ширину поля, в котором размеща, !*! Asgard (?), 19:32 , 14-Сен-16 (10)
    > В чистом Си как-то можно динамически изменять отступ в цикле при выводе
    > на экран через printf?
    > Допустим:
    > int a = 1;
    > a++;
    > while (a < 10) {
    > printf("d");
    > }
    > Вместо 12 как-то можно подставить переменную а?

    Если я Вас правильно понял, то вы спрашиваете про ширину поля, в котором размещается выводимый аргумент. Ширина эта задаётся числом, располагаемым между знаком % и квалификатором аргумента. Если она не задана, то автоматически задастся поле, достаточное для вывода всех символов аргумента. Если недостаточна - будет так же расширена.
    Например. printf ("[%d, %d]", 172, 9); выведет строку "[172, 9]"
    A вот printf ("[], ]]", 172, 9); -- строку "[  172,     9]" (ширина поля 5 символов, выравнивание по правой стороне)
    "Динамически" ширину поля можно указывать с помощью подстановочного квалификатора *. В этом случае фактическую ширину поля нужно передавать как один из соответствующих аргументов.
    Например: printf ("%*d", w, var); В результате значение переменноый var будет выведено в поле шириной w
    Между знаком % и шириной поля так же можно указать символ-заполнитель для поля.
    Например, printf ("%#9d", 108) выдаст строку "######108"

    сообщить модератору +/ответить
  • man 3 printf, !*! Led (ok), 22:40 , 15-Сен-16 (13)


Мой маленький OpenSpurce проект, !*! dcc0, (PHP) 06-Сен-16, 16:27  [ | | | ] [линейный вид] [смотреть все]
Хотел бы  анонсировать.
https://sourceforge.net/projects/easyvideocat/
Программа для вырезки фрагментов из видео с открытым исх. кодом. Правда, для Windows 32/64
Фактически - это обёртка для  ffmpeg, написанная на PHP (GUI).

Как реализвать substr в си?, !*! dcc0, (C/C++) 03-Сен-16, 01:54  [ | | | ] [линейный вид] [смотреть все]
нужен аналог для string.h в с
который есть в php
такой
$rest = substr("abcdef", 1);    
и такой
$rest = substr("abcdef",0, 1);  
Скрипт примонтирования, !*! Wellberg, (Shell скрипты) 18-Авг-16, 13:43  [ | | | ] [линейный вид] [смотреть все]
Нужен скрипт для проверки примонтирована директрория или нет.
Если нет, то примонтировать.
В качестве проверки

#!/bin/bash
dir_name="/mnt/backup"
if [ `mount | grep "$dir_name"` ]; then
echo "OK"
else
echo "Alarm!!! The directory $dir_name is not mounted!"
fi
Подскажите что не так, проверяю mount|grep /mnt/backup показывает что директория примонтирована,
запускаю скрипт,пишет что не примонтирована.
И вторая часть,
umount /mnt/backup/
cd /mnt/backup/
rm -r /mnt/backup/*
mount -a

И как связать первую часть со второй? То есть если директория не отмонтировалась, то запускалась бы вторая часть.
Скрипты для себя открыл только сегодня, заранее благодарен вашей помощи.

  • Вы слишком много куша а нет, не то Слишком много, или мало , кавычек А по, !*! Andrey Mitrofanov (?), 14:38 , 18-Авг-16 (1)
    > if [ `mount | grep "$dir_name"` ]; then

    Вы слишком много куша.. а нет, не то.  Слишком много, или мало?, "кавычек". А понимания мало.

    Или
    if mount |grep -qs "$dir_name"; then
    , или
    if [ "`mount |grep "$dir_name"` ]; then
    .

    Но на самом-то деле (там наверху проблема с совпадением по _подстроке_...) надо
    if mountpoint -q "$dir_name"; then
    !

    > echo "OK"
    > else

    И про вторую часть у меня есть чего добавить:

    > umount /mnt/backup/
    > cd /mnt/backup/
    > rm -r /mnt/backup/*
    > mount -a
    > И как связать первую часть со второй? То есть если директория не

    Чистишь файлы "под" примонтировнным разделом? _Просто_ смонтируй объемлющий раздел в другую директорию -- тем не будет "покрытия" этим макнт-поинтом!, сотри, если что есть, и отмонтируй. Навскидку, не проверяя:

    mkdir /tmp/fully-tmp \
        && mount --bind / /tmp/fully-tmp \
        && rm -r /tmp/fully-tmp/mnt/backup/* \
        && umount /tmp/fully-tmp
    || echo XFailedX

    И первая часть не нужна.

    сообщить модератору +/ответить
Bash vs Dash - подстановка управляющих символов, !*! AlAdin, (Shell скрипты) 14-Авг-16, 07:20  [ | | | ] [линейный вид] [смотреть все]
Надо найти в файле первую пустую строку (получить смещение байта). Файл является частью HTML-формы и пустая строка, кроме \n содержит ещё и \r. В общем, надо найти строку типа '^\r$'.

В bash-е команда
grep -bxm1 $'\r'
работает как ожидается.

В dash-е пишу
grep -bxm1 '\r'
ошибок не выдаёт, но и результата нет. Хотя если искать какой-то "реальный символ", то выдаёт предсказуемое значение.

Как подставить управляющий символ?

Спасибо

Подскажите инструменты для парсинга таблицы, !*! unixman, (Shell скрипты) 10-Авг-16, 12:05  [ | | | ] [линейный вид] [смотреть все]
Приветствую!
Нужна помощь/совет/направление в решении задачи.

Дано: Таблица (текстовый файл разделенный табами): Столбцы  A, B,  C содержащие разные данные и текстовый файл (шаблон)

Задача:
Произвести подстановку значений (помеченных как A B C)  в текстовом файле согласно значениям   файла таблицы  и сгенерировать для каждой пройденной строки (строки из табличного файла) текстовый файл.
Нужно чтобы скрипт каким-то образом читал каждую строку из табличного файла, и эти уникальные значения были переданы sed (видимо как аргументы или переменные) для подстановки в текстовом шаблоне и по окончании сохранив отдельным файлом. Таким образом сгенерировав множество текстовых файлов.
По шагам я понимаю, что я хочу сделать, но вот  как представить в скрипте данные из табличного файла, как ими оперировать не  понимаю?  В каком виде они должны быть, как переменные или массив или нечто другое?

P.S. Не бросайте камни, я не программист, с bash в общих чертах знаком (с базовым синтаксисом), но никогда не писал скрипты.
Буду благодарен за отклик.

Прекращение цикла, !*! Ordu, (Shell скрипты) 02-Авг-16, 15:17  [ | | | ] [линейный вид] [смотреть все]
Ниже однострочник, чья идея в том, чтобы взять два случайных файла из текущей директории, и скопировать их в другое место, параллельно перекодировав им звук. Вообще он мне нужен, чтобы закинуть на планшет и посмотреть в ванной пару случайных серий любимого сериала. При этом планшет не дружит с той звуковой дорожкой, которая есть, поэтому я перекодирую в mp3. Ну и естественно хотелось бы перекодировать и копировать параллельно, для экономии времени. Здесь в команде в качестве цели указана ./tmp/, но это просто я устранял возможные источники влияния.

Собственно, проблема в том, что он только один файл "копирует" -- первый.

ls *.mkv | shuf | head -n 2 | sort | (i=1; while read line; do ffmpeg -i "$line" -c:v copy -c:a mp3 tmp/$((i++)).mkv; done )

Если заменить ffmpeg на echo ffmpeg то он две строчки. Если всю команду в теле цикла на cp "$line" tmp/$((i++)).mkv, то тоже всё срабатывает как я ожидаю -- два случайных файла копируются с переименованием в 0.mkv, 1.mkv. Но если ffmpeg, то только один. Чтоза?

Работа с сирийным портом (Linux/Kernel/LKM), !*! Oxff, (Процессы, Треды, RPC) 17-Июл-16, 03:35  [ | | | ] [линейный вид] [смотреть все]
Приветствую!
Имеется исходник модуля ядра под Линукс, требуется из него работать с серийным портом.
Немного прошарил тему, сколько удалось понять, что по простому работать с виртуальным терминалом ttyS можно только из под юзер спейс.
В теории можно собрать свой низкоуровневый драйвер, но это сложновато для моего уровня знаний.
Какие варианты решения посоветуете?
  • В гугле забанили , !*! PavelR (??), 11:25 , 17-Июл-16 (1) +1
  • собрать свой драйвер, наверное а что конкретно надо делать-то там вообще н, !*! Alex_S (??), 16:50 , 19-Июл-16 (3)
    > Приветствую!
    > Имеется исходник модуля ядра под Линукс, требуется из него работать с серийным
    > портом.
    > Немного прошарил тему, сколько удалось понять, что по простому работать с виртуальным
    > терминалом ttyS можно только из под юзер спейс.
    > В теории можно собрать свой низкоуровневый драйвер, но это сложновато для моего
    > уровня знаний.
    > Какие варианты решения посоветуете?

    собрать свой драйвер, наверное.

      а что конкретно надо делать-то ?

      там вообще несколько слоев. драйвер уарта, line discipline  и  собссно /dev/ttyS*

      мож тебе проще драйвер уарта пропатчить, например. проинициализировать девайс из юзерспэйса , но потом дергать из твоего модуля драйвер уарта напрямую, а /dev/ttyS не трогать вообще.

    сообщить модератору +/ответить
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру