我正在尝试创建一个脚本,通过一些日志来获取特定模式,即:“HelloWorld”。日志位于我可以访问的不同服务器上。我已经能够收集信息并输出到文件,但为了提高效率,我希望能够对找到实例的次数进行编号/索引,同时仍然显示找到的模式。
这就是我所拥有的:
#!/bin/bash
ips=(*array containing the ip addresses of the servers*)
for j in ${ips[*]}
do
result=$(ssh abcuser@"$j" "grep -R -i 'HelloWorld' /user/home/doc/abc.log" 2>&1)
echo "$j has the following errors:
$result"
done
这可以完成我90%的任务,但是10%是我真正想要的。我知道我可以使用| wc -l来计算实例数但我丢失了输出文件上的模式。
使用此代码,这就是我得到的:
*ip_1* has the following errors:
2013-12-19 06:37:16,941 HelloWorld error, invoking the handler
2013-12-19 08:30:18,008 [WARN ] HelloWorld invoking error handler
*ip_2* has the following errors:
2013-12-19 13:37:16,941 [WARN ] HelloWorld invoking error handler
2013-12-19 15:30:18,008 HelloWorld error, invoking the handler
但是,以下是我想要的:
*ip_1* has the following errors:
1-2013-12-19 06:37:16,941 HelloWorld error, invoking the handler
2-2013-12-19 08:30:18,008 [WARN ] HelloWorld invoking error handler
*ip_2* has the following errors:
1-2013-12-19 13:37:16,941 [WARN ] HelloWorld invoking error handler
2-2013-12-19 15:30:18,008 HelloWorld error, invoking the handler
一个数字索引,告诉我每个服务器有多少个实例,是否可能?如果是的话,任何人都可以帮助我吗?
答案 0 :(得分:0)
在for循环中,我会有这样的东西:
echo "$j has the following errors:"
ssh abcuser@"$j" "grep -R -i 'HelloWorld' /user/home/doc/abc.log" | cat -n
格式与您指定的格式略有不同。如果您真的需要这种格式,可以在“cat -n”之后添加以下内容。
| sed -r 's/^\s*([0-9]+)\s*/\1-/'