带有awk过滤和查询的bash脚本

时间:2014-05-13 21:59:33

标签: bash sorting awk

我需要一些帮助才能完成一些代码。我想使用who命令进行查询,但我只想查看列出的用户,我在参数中提供了用户名和pts / num ,按登录时间排序。它适用于1个用户,但我想让更多用户使用它。这是atm:

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

如何让它与多个用户一起使用?

样品使用:

./script username1 username2 blabla pete stevie

1 个答案:

答案 0 :(得分: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 $@|tr " " "|"`
who|sort -k 3|awk -v users="$users" '$1 ~ users {print $1" "$2}'

实际上可以在awk中完成trsort,但我希望它足够好。

<强>更新

要摆脱tr,可以使用:

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

您可以使用asorti()替换sort