2014-11-03 3 views
0

"nstats"명령을 사용하여 서버 가동 시간과 함께 완전한 호스트 이름을 얻고 싶습니다. 스크립트가 제대로 작동하는 것 같습니다. "완전한"호스트 이름과 7 번째 열 (서버 가동 시간)이 인쇄 된 첫 번째 열에 대한 도움이 필요합니다.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'의 출력 내용을 표시 할 수 있습니까? 또한'read host while '명령을 사용하는 것이 가장 좋습니다. ...; 완료 fedorqui

+0

awk 명령 자체는 필드의 출력을 자르지 않습니다. – Jdamian

+0

여전히 "awk"를 사용하여 변수 $ 호스트로 서버 가동 시간을 에코 할 수 있습니까? {print $ host, $ 7, $ 8}와 (과) 비슷한 것 '; – Sunny

답변

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 
01 (서버 가동은 호스트를 덮어)이 모습

끝 부분에 서버 변수를 넣으십시오. 훨씬 더 멋지게 보입니다. 압축을 풀고 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

나는 그 스크립트를 시도했지만 여전히 부분 호스트 이름과 서버 가동 시간과 같은 결과를 얻었다. ($ cat 서버의 호스트).txt); do nstats $ 호스트 -H | awk 'BEGIN {IFS = "\ t"} {print $ 1, $ 7, $ 8}'; done – Sunny

+0

** nstats $ host -H **의 출력을 추가하십시오. 즉, awk 명령을 제거하고 루프를 실행하십시오. – Jdamian

+0

$ (cat servers.txt)의 호스트에 대해 LINXSERVE10 %; nstats $ host -H;를 실행하십시오. done 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