在bash中使用awk过滤输入

在bash中使用awk过滤输入,bash,awk,filter,Bash,Awk,Filter,我想使用服务器控制台中的/list检查我的minecraft服务器是否有在线玩家。这给了我以下的输入。目标是比较玩家是否在特定列表中。如果他不是,我们就踢他。在output.log中列出了允许的玩家(每行) 我们希望为玩家筛选以下输入以获取在线玩家,然后可以检查允许列表中是否有: [18:43:08] [pool-2-thread-528/INFO]: There are 2/100 players online. [18:43:08] [pool-2-thread-528/INFO]: Tes

我想使用服务器控制台中的
/list
检查我的minecraft服务器是否有在线玩家。这给了我以下的输入。目标是比较玩家是否在特定列表中。如果他不是,我们就踢他。在
output.log
中列出了允许的玩家(每行)

我们希望为玩家筛选以下输入以获取在线玩家,然后可以检查允许列表中是否有:

[18:43:08] [pool-2-thread-528/INFO]: There are 2/100 players online.
[18:43:08] [pool-2-thread-528/INFO]: Tester1212, Me99666
背后的想法是使用awk过滤输入,并通过观察
或类似内容来查找它们

最终输出应为(每一行):


如果只有一个玩家在线,并且没有
,则可能存在过滤问题

如果这是来自minecraft服务器上的
/list
,那么您要查找的记录将始终是第二条记录。这在这里很有用

您可以使用awk解析该行,如下所示:

 <your command> | awk -F": " 'NR==2{split($2,a,", "); for(x in a) print a[x]}'
| awk-F:“'NR==2{split($2,a,,”);用于(a中的x)打印a[x]}”
这将:

  • 用冒号和空格分隔记录
    -F:“
  • 如果我们在第二行/记录
    NR==2
  • 然后用逗号和空格分割第二个字段(您的姓名列表),并存储在名为“a”的数组中:
    split($2,a,,”)
  • 最后迭代数组,将每个元素分配给“x”,并打印元素:
    for(a中的x)print a[x]

  • awk
    中可能有一种更优雅的方法来实现这一点,但这是一个很好的开始,它解决了只有一个用户在您的服务器上的问题。

    如果这是来自minecraft服务器上的
    /list
    ,那么您要查找的记录将始终是第二条记录。这在这里很有用

    您可以使用awk解析该行,如下所示:

     <your command> | awk -F": " 'NR==2{split($2,a,", "); for(x in a) print a[x]}'
    
    | awk-F:“'NR==2{split($2,a,,”);用于(a中的x)打印a[x]}”
    
    这将:

  • 用冒号和空格分隔记录
    -F:“
  • 如果我们在第二行/记录
    NR==2
  • 然后用逗号和空格分割第二个字段(您的姓名列表),并存储在名为“a”的数组中:
    split($2,a,,”)
  • 最后迭代数组,将每个元素分配给“x”,并打印元素:
    for(a中的x)print a[x]

  • awk
    中可能有一种更优雅的方法来实现这一点,但这是一个良好的开端,它可以解决服务器上只有一个用户时的问题。

    您可以像这样使用
    awk

    awk -F ']: ' '/players online/{getline; gsub(/, */, ORS, $2); print $2}' output.log
    
    Tester1212
    Me99666
    

    您可以像这样使用
    awk

    awk -F ']: ' '/players online/{getline; gsub(/, */, ORS, $2); print $2}' output.log
    
    Tester1212
    Me99666
    
    试试这个-

    awk -F'[, ]' '/players online/ {getline; print $3RS$5}' f
    Tester1212
    Me99666
    

    试试这个-

    awk -F'[, ]' '/players online/ {getline; print $3RS$5}' f
    Tester1212
    Me99666
    


    否则,您将如何确定此特定行是应该解析的行?它总是输出的第二行吗?它是否总是出现在“网上有n/n玩家”这一行之后?我投票结束了这个问题,因为它似乎是一个对工具或解决方案的建议请求,而不是对您自己代码的帮助请求。这使您的问题脱离StackOverflow的主题。如果该评估不正确,并且您确实需要帮助编写自己的代码,那么请和我收回我的投票。是的,玩家总是直接列在“在线有/n/n玩家”之后。@ghoti这是我的minecraft服务器的输出。我想筛选当前的在线玩家。这是通过/list server命令实现的。您的问题中仍然没有包含任何代码。你要求的是施舍,而不是修复代码的帮助。当然,这里有人会向您提供讲义,以换取几张赞成票和一个复选标记,但这不是StackOverflow的内容。否则,您将如何确定这一行是应该解析的行?它总是输出的第二行吗?它是否总是出现在“网上有n/n玩家”这一行之后?我投票结束了这个问题,因为它似乎是一个对工具或解决方案的建议请求,而不是对您自己代码的帮助请求。这使您的问题脱离StackOverflow的主题。如果该评估不正确,并且您确实需要帮助编写自己的代码,那么请和我收回我的投票。是的,玩家总是直接列在“在线有/n/n玩家”之后。@ghoti这是我的minecraft服务器的输出。我想筛选当前的在线玩家。这是通过/list server命令实现的。您的问题中仍然没有包含任何代码。你要求的是施舍,而不是修复代码的帮助。当然,这里有人会给你提供讲义,以换取几张赞成票和一个复选标记,但这不是StackOverflow的意思。我会尽快尝试一下。谢谢你的帮助。(吃午饭:P)我会尽快试一试。谢谢你的帮助。(午餐:P)