Bash 检查word在文本文档中是否出现多次
基本上,我需要检查一个文件,以查看用户名是否出现多次,如果出现多次,则将该用户名放入另一个文件中 最后,该脚本意味着每3秒钟检查一次用户是否多次登录,如果是,则将其名称添加到名为user.deny的文件中 以下是我目前的基本情况:Bash 检查word在文本文档中是否出现多次,bash,shell,unix,scripting,Bash,Shell,Unix,Scripting,基本上,我需要检查一个文件,以查看用户名是否出现多次,如果出现多次,则将该用户名放入另一个文件中 最后,该脚本意味着每3秒钟检查一次用户是否多次登录,如果是,则将其名称添加到名为user.deny的文件中 以下是我目前的基本情况: who -q > temp.file if [ user occurs more than once in temp.file ]; then that username > user.deny fi 我只想知道一种方法来检查临时文件中出现多次的所有单词
who -q > temp.file
if [ user occurs more than once in temp.file ]; then
that username > user.deny
fi
我只想知道一种方法来检查临时文件中出现多次的所有单词/名称。我不能使用grep
,因为这需要一个模式
提前感谢。使用Ruby
您可以使用
sort
、uniq
和awk
执行此操作:
who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }' >> user.deny
如果要在添加用户名之前进行一些检查,可以将其包装在一个循环中:
for u in $(who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }')
do
grep "$u" user.deny || echo "$u" >> user.deny
done
任何用户名或特定用户名?您可以使用grep“username”temp.file | wc-c.对特定用户名进行grepwc-c会给你一个字数,“我正在寻找所有的用户名。”。因此,如果有john和anne登录两次,他们的名字都会进入该文件。如果我在搜索一个特定的名字,我会使用grep“john”,这不会是一个问题,但我不知道那里会有什么名字,它目前运行得很好,只是它会不断地反复添加用户。一个解决方案是做一个if,如果你的代码的产品已经存在于user.deny中,不要添加?现在就完美了。谢谢你!没问题,很乐意帮忙!
for u in $(who | awk '{print $1} '| sort | uniq -c | awk '{ if($1 > 1) {print $2} }')
do
grep "$u" user.deny || echo "$u" >> user.deny
done