首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有文本和数字的字符串重写到换行符上并插入文本。

将带有文本和数字的字符串重写到换行符上并插入文本。
EN

Unix & Linux用户
提问于 2018-08-13 10:55:52
回答 2查看 112关注 0票数 0

简而言之,我希望将单行输出字符串拆分为多个行,并将每个原始行标记为主机名。

主机名ProcessName CPUCore

output=$(ssh -q -o "StrictHostKeyChecking yes“$ssh_host 'ps -eo comm,lastcpu x grep rrcp')

如何通过返回输出循环插入循环,如下所示。

代码语言:javascript
复制
rrcpd 17 rrcpd 0

重写为

代码语言:javascript
复制
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 x 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

我已经修改了下面提供的内容,并设法使它开始工作。

代码语言:javascript
复制
#!/bin/bash
for remote in $(cat ssh_hosts2.txt)
do
    ssh -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
    sed "s/^/$remote /"
done
EN

回答 2

Unix & Linux用户

发布于 2018-08-13 11:04:42

请试试这个,

我已经将给定的示例输出保存在/tmp/test.txt文件中。

代码语言:javascript
复制
 xargs -n 2 | sed 's/^/Hostname1 /' 
  • -n意味着每行的最大参数。

例如;

代码语言:javascript
复制
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
EN

Unix & Linux用户

发布于 2018-08-13 11:48:24

您会看到所显示的数据类型( ssh命令的输出中每行超过两个字段)的唯一原因是将ssh+ps调用的输出收集到一个变量中,然后在没有正确引用的情况下输出它,比如在output=$(ssh ...)后面跟着echo $output而不是echo "$output"。幸运的是,您根本不需要收集变量中的数据。

代码语言:javascript
复制
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读取)。

或者,

代码语言:javascript
复制
while read remote; do
    ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
    sed "s/^/$remote /"
done 

在这里,我们只需在每行前面加上从文本文件中读取的主机名。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/462274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档