2014-05-13 50 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 
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) 

你希望得到例如:

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

如果是比这将为其工作你:

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

实际上它可以在或sortawk中完成,但我希望它已经足够好了。

UPDATE:

为了摆脱tr这可以用于:

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

您可以使用asorti()更换sort

+0

什么是-k 3的排序?如果按第3列(yyyy-mm-dd)排序,则应该识别第4列(hh:mm)。如果2个用户在同一天登录,该怎么办? – Daniel

+0

neaaaat,即时测试更多的盒子,不同的谁输出。但是你把谁放在|参数之间? – Daniel

+0

有一个老师的限制,脚本不应该创建任何文件 – Daniel