使用grep、awk或sed从列中获取信息

使用grep、awk或sed从列中获取信息,awk,sed,grep,Awk,Sed,Grep,我有以下表格: ^2num^5|^2score^5|^2ping^5 | ^2status ^5| ^2name players ^5| ^2address ---- ------- ------ -------- -------------------- -----------------------^7 ^5 0 ^2|^3 41 ^2|^3 100 ^2|^5 Player ^2|^7Just a Cr4zy name! ^2|^77.18.76.12:586

我有以下表格:

^2num^5|^2score^5|^2ping^5 | ^2status ^5| ^2name players      ^5|        ^2address
---- ------- ------ -------- -------------------- -----------------------^7
^5 0 ^2|^3  41 ^2|^3 100 ^2|^5 Player ^2|^7Just a Cr4zy name!   ^2|^77.18.76.12:58641   ^3[^5FR^3]^7
^5 2 ^2|^3   3 ^2|^3  57 ^2|^3  Bot   ^2|^7^8bot1                   ^2|^7bot
^5 3 ^2|^3   7 ^2|^3  43 ^2|^3  Bot   ^2|^7^8bot2                   ^2|^7bot
^5 4 ^2|^3  18 ^2|^3  16 ^2|^3  Bot   ^2|^7^8bot3                   ^2|^7bot
^5 5 ^2|^3   2 ^2|^3 103 ^2|^5 Player ^2|^7Just a ^5Cr4zy n4me2!   ^2|^784.18.8.144:27960   ^3[^5IL^3]^7
^5 6 ^2|^3  18 ^2|^3 102 ^2|^3  Bot   ^2|^7^8bot4                   ^2|^7bot
^5 7 ^2|^3  29 ^2|^3 102 ^2|^3  Bot   ^2|^7^8bot5                   ^2|^7bot
^5 8 ^2|^3  39 ^2|^3  54 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^5 9 ^2|^3  24 ^2|^3  77 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^510 ^2|^3  10 ^2|^3 103 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^511 ^2|^3  42 ^2|^3  95 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^512 ^2|^3   2 ^2|^3 103 ^2|^5 Player ^2|^7Ju5t a ^5Cr4zy ^7name3!      ^2|^722.185.55.9:13565   ^3[^5IL^3]^7
^513 ^2|^3  24 ^2|^3  96 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^514 ^2|^3   0 ^2|^3  51 ^2|^3  Bot   ^2|^7^8bot                    ^2|^7bot
^2-------------------------------------------------------------------------^7
^5Bots : ^311 ^5, Players : ^33 ^5, All : ^314
我想获取每行的信息:num和address 每一列都以我不需要的颜色代码开始和结束。与第1列一样,它以^5开头,以^2结尾 也可以跳过带有bot的行

输出我更喜欢:

0 77.18.76.12
5 84.18.8.144
12 22.185.55.9
另外,我想有球员的人数显示在最后一行

最好是sed、grep或awk

事先非常感谢。

在awk:

$ awk 'match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) {
           print substr($0,3,2),substr($0,RSTART,RLENGTH) }
 0 77.18.76.12
 5 784.18.8.144
12 722.185.55.9
如果记录中有一个看起来像ip的字符串,
打印它以及记录开头的字符3和4。如果播放器使用ip地址作为名称,则自然会失败

计算玩家的单独脚本:

$ awk 'match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) {
           i++ }           # player counter
       END{ print "Players : " i+0 }' file
在awk中:

$ awk 'match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) {
           print substr($0,3,2),substr($0,RSTART,RLENGTH) }
 0 77.18.76.12
 5 784.18.8.144
12 722.185.55.9
如果记录中有一个看起来像ip的字符串,
打印它以及记录开头的字符3和4。如果播放器使用ip地址作为名称,则自然会失败

计算玩家的单独脚本:

$ awk 'match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) {
           i++ }           # player counter
       END{ print "Players : " i+0 }' file

在第一列中有一个条目
^510^2
。这是一个输入错误,应该是
^5 10^2
,或者实际数据在
^5
之后没有空格?不,不是输入错误。数字0-9有空格,10及以上没有。在第一列中有一个条目
^510^2
。这是一个输入错误,应该是
^5 10^2
,或者实际数据在
^5
之后没有空格?不,不是输入错误。数字0-9有空格,10或更高的数字没有。哇,非常感谢。它在现场模式下工作。。如果ppl有一个IP作为名称,我可以通过警告他们并将他们踢出来掩盖这一点:)你是否可以回答第二个问题:分开,我想知道最后一行显示的玩家数量。?很抱歉,我没有完全弄清楚这一点,但是我需要玩家的数量作为一个单独的代码。谢谢@EdMorton@EdMorton你是对的,我想鼓励OP用原始答案进行实验。哇,非常感谢。它在现场模式下工作。。如果ppl有一个IP作为名称,我可以通过警告他们并将他们踢出来掩盖这一点:)你是否可以回答第二个问题:分开,我想知道最后一行显示的玩家数量。?很抱歉,我没有完全弄清楚这一点,但是我需要玩家的数量作为一个单独的代码。谢谢@EdMorton@EdMorton你是对的,我试图鼓励OP用原始答案进行实验。