Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 从';最后';unix中的命令-有例外_Macos_Unix_Sed_Awk - Fatal编程技术网

Macos 从';最后';unix中的命令-有例外

Macos 从';最后';unix中的命令-有例外,macos,unix,sed,awk,Macos,Unix,Sed,Awk,如果我在OS X上运行此操作: last -10 | awk '{print $1}' 我得到: 切碎 切碎 切碎 chrihopk 重新启动 关机 切碎 切碎 切碎 克里霍普 如何使用sed或awk获得最频繁的用户“chop” 问题的附加编辑: 我们的本地管理员帐户会干扰结果(用户名:support),而且我们的客户端上通常会有一个新的启动程序。 我如何修改 last -1 要省略以下内容并返回最后一个有效用户名: 支持 重新启动 关闭 谢谢如果您将其导入排序,您将获得一个易于分析的数

如果我在OS X上运行此操作:

last -10 | awk '{print $1}'
我得到: 切碎
切碎
切碎
chrihopk
重新启动
关机
切碎
切碎
切碎
克里霍普

如何使用sed或awk获得最频繁的用户“chop”

问题的附加编辑:
我们的本地管理员帐户会干扰结果(用户名:support),而且我们的客户端上通常会有一个新的启动程序。
我如何修改

last -1  
要省略以下内容并返回最后一个有效用户名:

支持
重新启动
关闭


谢谢

如果您将其导入排序,您将获得一个易于分析的数据列表,以查找最频繁的用户,尽管我不知道如何在没有脚本语言的情况下查找该用户

bash$ last -10 | awk '{print $1}' | sort | uniq -c | sort -nr | head -1 | awk '{print $2}'
sort-un
做了些什么,但我不确定是什么

bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog'
bob
bob
cat
cat
cat
dog
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort | uniq -c | sort -nr
      3 cat
      2 bob
      1 dog
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort -un
bob
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort | uniq -c | sort -nr | head -n1 | awk '{print $2}'
cat

以下管道提供了一个起点,我确信可以对其进行优化:

last | awk '{A[$1] += 1; for (v in A) print A[v],v}' | sort -ur | head -n 1 | awk '{print $2}'
如果你愿意

  • 具有登录次数的用户的良好升序列表(仅
    $0!~/^$/
    内容确保不计算空行):

  • 具有登录号码的用户名:

    | tail-1
    附加到上述代码

  • 与awk中的上述相同(更快):

  • 仅在awk中使用用户名:

    从上述代码中删除最后一个
    m,

    • 刚刚好

      last -10 |awk '{ user[$1]++}
      END{
          t=0
          for(i in user){
              if (user[i]>t) {
                  t=user[i]
                  u=i
              }
          }
          print t,u
      }' 
      

      使用gawk,您可以使用asort、asorti内部函数来回答您的编辑,将数值参数保留为最后一个,并使用如下方式:

      last | egrep -v 'support|reboot|shutdown'
      

      然后像其他答案一样,将这些信息输入到
      awk

      @earcar:你每天都会学到新的东西。经过测试,它似乎工作。。。不过,我对它的工作原理感到困惑,因为我可以找到零个文档来说明它会这样做。。。这是一百万年前的一个兼容性选项吗?@eacar:我知道排序-u,并在适当的地方使用过它。。。哪里有文件证明,
      sort-un
      的行为不同于
      sort-n-u
      ?太多的管道链接和丑陋。
      sort-un
      在Mac OS X(GNU textutils 1.14)上对我不起作用@adam:我在osx 10.5上,它可以工作:sort(GNU coreutils)5.93(没有macports或类似的)@stobor:
      -u-n
      -un
      之间的行为没有任何区别。。你有什么版本的排序?+1表示
      sort-un
      ,尽管我不知道它在哪里表示这种组合的功能…完美。第一个选择正是我想要的。非常感谢。Hi earcar-抱歉,你说得很对,但我仍在测试这些解决方案,现在准备补充这个问题。我刚才正在处理一些项目,但现在又回到了这个问题上。编辑在上面。谢谢你的意见。chris您应该使用代码或blockquote功能格式化您的问题,使其更具可读性。
      last -10 |awk '{ user[$1]++}
      END{
          t=0
          for(i in user){
              if (user[i]>t) {
                  t=user[i]
                  u=i
              }
          }
          print t,u
      }' 
      
      last | egrep -v 'support|reboot|shutdown'