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

Ваш вопрос не был мне понятен на 100%. Но если вы спрашиваете, как заменить inp на output, вы можете сделать это с помощью awk:

print "inp1" | awk 'sub(/inp/,"output")'
0
13.08.2018, 17:49
2 ответа

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

Я сохранил данный образец вывода в файле /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
2
28.01.2020, 02:31

Единственная причина, по которой вы увидите тип данных, который вы показываете (более двух полей в строке в выводе команды 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 <hosts.txt

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

Как вариант,

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

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

0
28.01.2020, 02:31

Теги

Похожие вопросы