我想使用" nstats"来获得一个完整的主机名及其服务器正常运行时间。命令。该脚本似乎正常工作。我需要第一列的帮助,其中包含#34;完整的"主机名和第7列(服务器正常运行时间)已打印。
以下命令仅向我提供其部分主机名:
for host in $(cat servers.txt); do nstats $host -H | awk 'BEGIN {IFS="\t"} {$2=$3=$4=$5=$6=$9="" ; print}' ; done
BAD输出 :(主机名在第12个字符后被切断)
linux_server 223 days
linux_server 123 days
windows_serv 23 days
windows_serv 23 days
预期输出:
linux_server1 223 days
linux_server2 123 days
windows_server1 23 days
windows_server2 123 days
servers.txt文件的内容如下:
linux_server1
linux_server2
windows_server1
windows_server2
没有awk的输出
LINXSERVE10% for host in $(cat servers.txt); do nstats $host -H ; done
linux_server 0.01 47% 22% 56 05:08 20 days 17:21:00
linux_server 0.00 23% 8% 45 05:08 24 days 04:16:46
windows_serv 0.04 72% 30% 58 05:09 318 days 23:32:17
windows_serv 0.00 20% 8% 40 05:09 864 days 12:23:10
windows_serv 0.00 51% 17% 41 05:09 442 days 05:30:14
注意:for host in $(cat servers.txt); do nstats $host -H | awk -v server=$host 'BEGIN {IFS="\t"} {$2=$3=$4=$5=$6=$9="" ; print server }' ; done
***这项工作正常,但它只列出一个完整的主机名,没有服务器正常运行时间。
非常感谢您提供的任何帮助。
答案 0 :(得分:0)
你知道你可以选择用awk打印的字段吗?
for host in $(cat servers.txt); do
nstats $host -H |
awk 'BEGIN {IFS="\t"} {print $1,$7,$8}';
done
这些只会打印您感兴趣的三个字段。
awk代码标记为" note"完全没用 - 相当于
for host in $(cat servers.txt); do
echo "$host"
done
更新:在意识到问题是 nstats 命令后,awk行命令将是
awk -v server="$host" 'BEGIN {IFS="\t"} {print server,$7,$8}';
然后输出看起来像这样(服务器正常运行时覆盖了主机名)
20 daysrver
24 daysrver
318 daysver
864 dayserv
442 dayserv
所以我把服务器变量放在最后,它看起来好多了,我可以提取它并在excel中使用它。非常感谢Jdamian!
for host in $(cat servers.txt); do nstats $host -H | awk -v server="$host" 'BEGIN {IFS="\t"} {print $7,$8,server}'; done
20 days linux_server1
24 days linux_server2
318 days windows_server1
864 days windows_server2
442 days windows_server3