2014-11-03 80 views
0

我希望通過使用「nstats」命令來獲得一個完整的主機名及其服務器正常運行時間。該腳本似乎工作正常。我需要第一列的「完整」主機名和第七列(服務器正常運行時間)的幫助。使用awk格式化nstats的輸出

這下面的命令只給我自己的部分主機名:

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 ***此工程確定,但它只會列表沒有服務器正常運行時間的完整主機名。

任何幫助,你可以給予將不勝感激。

+1

你能說明一個'nstats $ host -H'的輸出是什麼嗎?另外,最好是在讀主機的同時,做...;完成 fedorqui 2014-11-03 09:48:05

+0

awk命令本身不會剪切字段的輸出。 – Jdamian 2014-11-03 10:04:55

+0

仍然可以使用「awk」通過變量$ host回顯服務器正常運行時間?類似於{print $ host,$ 7,$ 8}'; – Sunny 2014-11-03 10:22:05

回答

0

你知道你可以選擇在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 

UPDATE:實現了問題後的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 
+0

我試過這個腳本,它仍然給了我部分主機名和服務器正常運行時間的相同結果。 用於$(貓服務器。文本);做 nstats $ host -H | awk'BEGIN {IFS =「\ t」} {print $ 1,$ 7,$ 8}'; done – Sunny 2014-11-03 10:03:50

+0

請添加** nstats $ host -H **的輸出,即刪除awk命令並運行循環。 – Jdamian 2014-11-03 10:05:53

+0

LINXSERVE10%用於$(cat servers.txt)中的主機;做nstats $主機-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% – Sunny 2014-11-03 10:11:44