文本内容大致为:
    exporter.log:

    1. devops_monitor_prom_node-2 | CHANGED | rc=0 >>
    2. root 26417 26416 0 02:27 pts/1 00:00:00 /bin/sh -c ps -ef |grep node_exporter
    3. root 26419 26417 0 02:27 pts/1 00:00:00 grep node_exporter
    4. gerrit1 | CHANGED | rc=0 >>
    5. root 159753 159752 0 10:27 pts/4 00:00:00 /bin/sh -c ps -ef |grep node_exporter
    6. root 159755 159753 0 10:27 pts/4 00:00:00 grep node_exporter
    7. node_ex+ 201401 1 0 Jan08 ? 00:00:34 /usr/sbin/node_exporter --collector.textfile.directory /var/lib/node_exporter/te
    8. xtfile_collector
    9. gerrit_mirror | CHANGED | rc=0 >>
    10. node_ex+ 120488 1 0 Jan08 ? 00:00:38 /usr/sbin/node_exporter --collector.textfile.directory /var/lib/node_exporter/te
    11. xtfile_collector

    要找到安装了node_exporter的hosts
    把段落转成一行,按>>符号分隔
    while read line ;do last2=echo ${line:0-2};if [ “$last2” == “>>” ];then echo ;echo -n $line;else echo -n $line;fi;done < ./exporter.log > 1exporter.log
    过滤需要的结果
    more 1exporter.log |grep “/usr/sbin/node_exporter”|awk ‘{print $1}’ > installed.log
    得到到是主机名,把主机名转为ip
    while read line ;do grep $line /etc/hosts|awk ‘{print $1}’;done < ./installed.log
    得到ip列表。

    将过程写成shell script

    1. $ cat findIpsFromAnsibleLog.sh
    2. #!/bin/sh
    3. #$1:input a ansible log file
    4. #$2:a key string to filter, only output hosts whose include key string.
    5. #$3:if == "i" , filter will be inverse , only output hosts whose not include key string.
    6. spliter=">>"
    7. tmpfile="/tmp/ansible`date +%s`.1"
    8. if [ "$1" == "" ];then #$1
    9. echo input an ansible log file to handle.
    10. else #$1
    11. while read line ;do
    12. last2=`echo ${line:0-2}`;
    13. if [ "$last2" == "$spliter" ];then
    14. echo ;
    15. echo -n $line;
    16. else
    17. echo -n $line;
    18. fi;
    19. done < $1 > $tmpfile
    20. if [ "$2" == "" ];then #$2
    21. awk '{print $1}' $tmpfile
    22. else #$2
    23. if [ "$3" == "" ];then #$3
    24. grep "$2" $tmpfile | awk '{print $1}'
    25. else #$3
    26. grep -v "$2" $tmpfile | awk '{print $1}'
    27. fi #$3
    28. fi #$2
    29. fi #$1
    30. rm $tmpfile