【问题标题】:Using awk to format an output for nstats使用 awk 格式化 nstats 的输出
【发布时间】:2014-11-03 19:03:14
【问题描述】:

我想使用“nstats”命令获取完整的主机名以及他们的服务器正常运行时间。该脚本似乎工作正常。我需要关于第 1 列的“完整”主机名和第 7 列(服务器正常运行时间)打印的帮助。

以下命令只给我他们的部分主机名:

 for host in $(cat servers.txt); do nstats $host -H | awk 'BEGIN {IFS="\t"} {$2=$3=$4=$5=$6=$9="" ; print}' ; done

错误输出:(主机名在第 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 *** 这工作正常,但它只会列出一个完整的主机名,没有服务器正常运行时间。

如果您能提供任何帮助,我们将不胜感激。

【问题讨论】:

  • 你能显示一个nstats $host -H 的输出吗?另外,最好使用while read host; do ... ; done < servers.txt。无需for host in $(cat ...)
  • awk 命令本身不会剪切字段的输出。
  • 仍然可以使用“awk”通过变量 $host 来回显服务器正常运行时间吗?像 {print $host,$7,$8}';

标签: awk


【解决方案1】:

你知道你可以选择在 awk 中打印的字段吗?

for host in $(cat servers.txt); do
    nstats $host -H |
    awk 'BEGIN {IFS="\t"} {print $1,$7,$8}';
done

这些只会打印您感兴趣的三个字段。

标记为“注释”的 awk 代码完全没用 -- 相当于

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

【讨论】:

  • 我尝试了该脚本,但它仍然给了我与部分主机名和服务器正常运行时间相同的结果。 $(cat servers.txt) 中的主机;做 nstats $host -H | awk '开始 {IFS="\t"} {打印 $1,$7,$8}';完成
  • 请添加 nstats $host -H 的输出,即删除 awk 命令并运行循环。
  • LINXSERVE10% for host in $(cat servers.txt);做 nstats $host -H ;完成 linux_server 0.01 47% 22% 56 05:08 20 天 17:21:00 linux_server 0.00 23% 8% 45 05:08 24 天 04:16:46 windows_serv 0.04 72% 30% 58 05:09 318 天 23:32 :17 windows_serv 0.00 20% 8% 40 05:09 864 天 12:23:10 windows_serv 0.00 51% 17% 41 05:09 442 天 05:30:14 LINXSERVE10%
  • 您是否意识到 nstats 命令正在切断服务器名称而不是 awk 命令?
  • 哦,好的。感谢您的出色回答。无论如何我仍然可以使用 :awk" 作为服务器正常运行时间和变量 $host?像 {print $host,$7,$8}';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2019-09-01
  • 2016-12-23
  • 2010-12-23
  • 2019-05-06
相关资源
最近更新 更多