переписать строку с текстом и цифрами на новую строку и вставить текст

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

Имя хоста ProcessName CPUCore

output = $ (ssh -q -o “StrictHostKeyChecking yes” $ ssh_host ‘ps -eo comm, lastcpu | grep rrcp’)

Как вставить цикл через возврат, который выглядит так.

rrcpd 17 rrcpd 0 

и переписать как

 Hostname1 rrcpd 17 Hostname1 rrcpd 0 

Заметка

  • Числа могут очень от 0-32

  • Имя хоста – переменная строка $ myhost

  • Текст меняется, то есть это не строго rrcpd, это может быть, например,

    rrcpd 17 rrcpd 0

    Сыр 3 кекса 8

    Кошки 9 собак 3

Команды, которые запускаются на каждом хосте

output = $ (ssh -q -o “StrictHostKeyChecking yes” $ ssh_host ‘ps -eo comm, lastcpu | grep rrcp’)

Когда я удаляю grep, выходные данные могут возвращаться с 3-5 процессами, поэтому я хочу иметь возможность разделить каждый вывод и добавить имя хоста в raw, чтобы обозначить каждый вывод. Я проверяю, какие процессы запущены на каждом хосте.

rrcpd 0 rrcp_mon.sh 24

rrcpd 0

rrcpd 0

rrcpd 0 rrcpd 1

rrcpd 0 rrcpd 0 rrcp_mon 24 rrcp_mon 24

rrcpd 0

rrcpd 0

rrcpd 17 rrcpd 0

ARD 9 SSH 32 httpD 21 Bax 22

Я изменил приведенное ниже и смог заставить его работать

 #!/bin/bash for remote in $(cat ssh_hosts2.txt) do ssh -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu | sed "s/^/$remote /" done 

    2 Solutions collect form web for “переписать строку с текстом и цифрами на новую строку и вставить текст”

    пожалуйста, попробуйте это,

    Я сохранил данный пример вывода в файле /tmp/test.txt.

      xargs -n 2 | sed 's/^/Hostname1 /' 
    • -n означает максимальное количество аргументов в строке.

    Например;

     cat /tmp/test.txt | xargs -n 2 | sed 's/^/Hostname1 /g' Hostname1 rrcpd 17 Hostname1 rrcpd 0 Hostname1 Cheese 3 Hostname1 cakes 8 Hostname1 Cats 9 Hostname1 dogs 3 

    Единственная причина, по которой вы видите тип отображаемых данных (более двух полей на строку в выходных данных команды ssh ) – это когда вы собираете выходные данные вашего вызова ssh + ps в переменную и затем выводите их без кавычек правильно, как в output=$(ssh ...) за которым следует echo $output вместо echo "$output" . К счастью, вам вообще не нужно собирать данные в переменную.

     while read remote; do ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu | awk -v host="$remote" '/rrcp/ { print host, $1, $2 }' done  

    Здесь awk читает непосредственно из команды ssh а также выполняет ту работу, которую изначально выполнял grep в вашем коде. Предполагается, что он получит строки с двумя полями и префикс каждой пары полей с заданным именем хоста (читается из hosts.txt ).

    С другой стороны,

     while read remote; do ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu | sed "s/^/$remote /" done  

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

    Interesting Posts

    Улучшения полосы пропускания ожидаются от перехода на Wayland или Mir?

    подсчитать количество строк, предоставленных скрипту Python до и после задачи

    Удалите другую установку Linux на одном жестком диске

    как заменить от A до B комбад?

    Как gcc знает, где установлен boost

    Таблица резервного копирования GPT повреждена. Исправление исчезнет при перезагрузке

    Новая установка Archlinux не загружается с HD на новый HP Proliant Gen8

    Сценарий оболочки не найден

    Ошибка синтаксиса рядом с неожиданным токеном `done '

    Строка поиска с использованием grep

    раздражающее сообщение «Соединение X11 отклонено из-за неправильной аутентификации», в то время как нет никакой проблемы вообще

    xargs и vi – «Вход не от терминала»

    Проверьте, включен ли SSH или отключен в Solaris 11

    Процессорный вентилятор очень быстрый даже с 0% CPU

    Как активировать swap после добавления дополнительной памяти?

    Linux и Unix - лучшая ОС в мире.