• Как разделить текстовый файл на части с равным количеством строк?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    забудьте про cmd
    Powershell гораздо легче дастся вам в освоении.
    пример для вашего случая
    $file = get-content "путь к файлу"
    $parts = 4 #количество частей
    $lines = [math]::Round($file.Length/$parts) 
    for ($i = 0; $i -le $parts; $i++) {
        $file | Select -Skip ($lines*$i/1) -First ($lines*($i+1)/1) | Set-Content -Path "путь к целевой папке\part_$i.txt"
    }

    Быстро он будет работать только в случае относительно небольших файлов. поскольку файл загружается в память полностью.
    Если размер вашего файла идет на гигабайты - можете попробовать адаптировать под вас скрипт
    https://stackoverflow.com/questions/1001776/how-ca...
    В скрипте есть условие сравнения с размером целевых файлов - вы можете изменить его на условие сравнения с количеством строк в файле
    Ответ написан
    4 комментария
  • Как написать скрипт для cron, для проверки наличия процесса?

    @sergeypr
    код ниже в crontab с желаемой периодичностью:
    #!/bin/sh
    # Проверка работы программы
    # Название процесса
    DAEMON="/usr/bin/ххххх"
    # "Убираем" grep из вывода
    EXCLUDE="grep"
    # Минимальное количество процессов
    PROC_NUM="0"
    # Команда для перезапуска
    RESTART="/etc/init.d/ххххх start"
    # Утилита ps
    PS="/bin/ps"
    # Утилита grep
    GREP="grep"
    if [ `$PS -ax | $GREP $DAEMON | $GREP -v $EXCLUDE | wc -l` -le "$PROC_NUM" ]
    then
       $RESTART
    fi


    Для рестарта с периодичностью 24 часа:
    добавить в crontab
    0 */24 * * * /etc/init.d/ххххх restart
    Ответ написан
    Комментировать
  • Как на bash переименовать все .txt файлы в папке?

    Scorpi
    @Scorpi
    for file in *.txt
    do
      mv "$file" "new_name"
    done
    Ответ написан
    Комментировать
  • Как выполнить команды CMD одной строкой?

    wisgest
    @wisgest
    Не ИТ-специалист
    Переменные окружения полностью поставляются в составной команде до её выполнения (чтобы это увидеть можно не отключать режим вывода команд):
    set a=1
    set a=2& echo %a%

    или
    set a=1
    (
     set a=2
     echo %a%
    )

    — выведет 1.

    Для отложенного раскрытия переменных используйте
    set /a M=%NUMBER_OF_PROCESSORS%/2 & echo !M!> 1.txt

    — при этом перед этим в командном файле должна присутствовать команда
    setlocal enabledelayedexpansion
    или cmd.exe должен быть запущен с ключом /v или режим отложенного раскрытия переменных по умолчанию должен быть задан в реестре (см. set /?,setlocal /?, cmd /?).

    Для отложенного раскрытия переменных, даже если соответствующий режим не включен, можно также воспользоваться командой call:
    • в командных файлах
      set /a M=%NUMBER_OF_PROCESSORS%/2 & call echo %%M%%> 1.txt

    • вне командных файлов
      set /a M=%NUMBER_OF_PROCESSORS%/2 & call echo ^%M^%> 1.txt


    Кстати. В арифметическом присваиванииset /a для отложенного раскрытия переменных их можно записывать не как %var% или !var!, а просто var:
    set /a M = NUMBER_OF_PROCESSORS / 2
    Ответ написан
    1 комментарий
  • Как выполнить команды CMD одной строкой?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    SETLOCAL EnableDelayedExpansion & set /a M=%NUMBER_OF_PROCESSORS%/2 & echo !M!
    Ответ написан
    Комментировать