2014-05-13 5 views
0

약간의 코드를 완성하려면 약간의 도움이 필요합니다. who 명령을 사용하여 쿼리를 수행하고 싶지만 사용자 이름이 이고 pts/num이 인 로그인 목록에 나열된 사용자 만 로그인 할 수 있습니다. 그것은 1 명의 사용자를 위해 일하지만 더 많은 사용자들과 함께 작업하고 싶습니다. 여기에 atm이 있습니다 :awk 필터링 및 쿼리를 사용하는 bash 스크립트

#!/bin/bash 
who | 
awk '($1 ~ /'$*'/){print $3 $4" "$1" "$2}' | 
sort -n | 
awk '{ print $2, $3 }' 

여러 사용자가 어떻게 작동합니까?

샘플 사용 :

./script username1 username2 blabla pete stevie 
+0

예제를 어떻게 실행 하시겠습니까? – pawel7318

+0

./script username1 username2 blabla pete stevie etc. – Daniel

+0

다른 숙제? :) – pawel7318

답변

1

난 당신이 올바른 얻을 것보다 대한이가 작동보다

$ ./who.sh foo bar 
bar pts/5 
foo pts/15 
bar pts/17 
bar pts/18 

그렇다면 : 당신은 예를 들어 얻을 것으로 예상

$ who 
oxo tty7   2014-05-12 14:32 (:0) 
bar pts/5  2014-05-12 18:35 (:0:S.1) 
oxo pts/1  2014-05-13 13:29 (:0:S.5) 
baz pts/8  2014-05-12 18:35 (:0:S.2) 
oxo pts/12  2014-05-12 18:35 (:0:S.3) 
oxo pts/13  2014-05-12 18:35 (:0:S.4) 
foo pts/15  2014-05-12 18:35 (:0:S.0) 
bar pts/17  2014-05-13 19:36 (:0:S.6) 
bar pts/18  2014-05-14 00:03 (:0:S.7) 

너 :

#!/bin/bash  
users=`echo [email protected]|tr " " "|"` 
who|sort -k 3|awk -v users="$users" '$1 ~ users {print $1" "$2}' 

실제로는 awktr 또는 sort으로 만 수행 할 수 있지만 충분히 좋겠 으면합니다.

업데이트 :

이 사용할 수 있습니다 tr 제거하려면 : 당신은 sort을 대체 할 asorti()을 사용할 수 있습니다

#!/bin/bash 
who|sort -k 3|awk -v users="$*" 'BEGIN { regex = gensub(/\s/, "|" ,"g", users) }; $1 ~ regex { print $1" "$2 }' 

.

+0

정렬에 -k 3 무엇입니까? 세 번째 열 (yyyy-mm-dd)로 정렬하면 네 번째 열 (hh : mm)도 인식되어야합니다. 같은 날에 2 명의 사용자가 로그인 한 경우 어떻게됩니까? – Daniel

+0

neaaaat, 더 많은 박스에서 다른 사람의 출력을 테스트하고 있습니다. 하지만 누가 너를 두는거야? 인수들 사이에? – Daniel

+0

선생님에 의한 제한이 있습니다. 스크립트는 어떤 파일도 생성해서는 안됩니다. – Daniel