Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Regex 如何在awk脚本中使用正则表达式?_Regex_Bash_Awk - Fatal编程技术网

Regex 如何在awk脚本中使用正则表达式?

Regex 如何在awk脚本中使用正则表达式?,regex,bash,awk,Regex,Bash,Awk,嗨,我正在尝试制作一个脚本,它将给我一个新闻组活动的摘要。到目前为止,它大部分都能正常工作,除了我尝试使用匹配运算符查看$6字段是否与表达式匹配时。我想把所有的戒指都放在一个部分下面。这就是我的脚本的样子: Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu group alt.education.distance 19 Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.

嗨,我正在尝试制作一个脚本,它将给我一个新闻组活动的摘要。到目前为止,它大部分都能正常工作,除了我尝试使用匹配运算符查看$6字段是否与表达式匹配时。我想把所有的戒指都放在一个部分下面。这就是我的脚本的样子:

Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu group alt.education.distance 19
Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu exit articles 19 groups 1
Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu times user 0.470 system 0.930 elapsed 4.766
Feb 13 21:27:49 ringer nnrpd[11462]: ring42.cs.utsa.edu exit articles 0 groups 2
Feb 13 21:27:49 ringer nnrpd[11462]: ring42.cs.utsa.edu times user 2.020 system 1.430 elapsed 45.114
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu group utsa.lonestar 7
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu exit articles 7 groups 1
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu times user 0.520 system 0.890 elapsed 48.286
Feb 13 21:28:38 ringer innd: ME running
Feb 13 21:28:43 ringer nnrpd[11344]: lonestar.jpl.utsa.edu unrecognized NOOP
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu connect
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu exit articles 0 groups 0
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu times user 0.470 system 0.770 elapsed 1.456
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu connect
Feb 13 21:29:03 ringer nnrpd[11472]: ring29.cs.utsa.edu exit articles 0 groups 0
Feb 13 21:29:03 ringer nnrpd[11472]: ring29.cs.utsa.edu times user 1.360 system 0.790 elapsed 114.771
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu exit articles 0 groups 0
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu times user 0.530 system 0.650 elapsed 1.524
Feb 13 21:29:25 ringer nnrpd[11615]: lonestar.jpl.utsa.edu connect
newsread.awk:

BEGIN{
print "\t\t\tNews Reader Summary\n\n"
printf("               %-15s%-15s%-15s%-15s\n\n","lonestar","runner","ringer","rings"); 
articles[4];
groups[4];
times[4];
cs2413[4];cs2413d[4];
}

NR == 1 {date1 = $1 " " $2 " " $3}

$6 == "lonestar.jpl.utsa.edu"{
    if ($7=="group"){
        articles[1]+=$9;
        if ($8=="utsa.cs.2413"){
            cs2413[1]+=$9;
        }
        if ($8=="utsa.cs.2413.d"){
            cs2413d[1]+=$9;
        }
    }else if ($7 == "exit"){
        articles[1]+=$9;
        groups[1]+=$11;
    }else {
        times[1]+=$13;
    }
}

$6 == "runner.jpl.utsa.edu"{
    if ($7=="group"){
                articles[2]+=$9;
         if ($8=="utsa.cs.2413"){
                        cs2413[2]+=$9;
                }
                if ($8=="utsa.cs.2413.d"){ 
                        cs2413d[2]+=$9;
                }

        }else if ($7 == "exit"){
                articles[2]+=$9;
                groups[2]+=$11;
        }else {
                times[2]+=$13;
        }

}

$6 == "ringer.cs.utsa.edu"{
    if ($7=="group"){
                articles[3]+=$9;
         if ($8=="utsa.cs.2413"){
                        cs2413[3]+=$9;
                }
                if ($8=="utsa.cs.2413.d"){ 
                        cs2413d[3]+=$9;
                }

        }else if ($7 == "exit"){
                articles[3]+=$9;
                groups[3]+=$11;
        }else {
                times[3]+=$13;
        }

}

$6 ~ "/ring??.cs.utsa.edu/"{
    if ($7=="group"){
                articles[4]+=$9;
         if ($8=="utsa.cs.2413"){
                        cs2413[4]+=$9;
                }
                if ($8=="utsa.cs.2413.d"){ 
                        cs2413d[4]+=$9;
                }

        }else if ($7 == "exit"){
                articles[4]+=$9;
                groups[4]+=$11;
        }else {
                times[4]+=$13;
        }

}
END{
    date2 = $1 " " $2 " " $3
    printf("Articles:      %-15d%-15d%-15d%-15d\n",articles[1],articles[2],articles[3],articles[4]); 
    printf("Groups:        %-15d%-15d%-15d%-15d\n",groups[1],groups[2],groups[3],groups[4]); 
    printf("Cs2413:        %-15d%-15d%-15d%-15d\n",cs2413[1],cs2413[2],cs2413[3],cs2413[4]); 
    printf("Cs2413.d:      %-15d%-15d%-15d%-15d\n",cs2413d[1],cs2413d[2],cs2413d[3],cs2413d[4]); 
    printf("User Time:     %-15d%-15d%-15d%-15d\n",times[1],times[2],times[3],times[4]);  
    printf("\nStart Time = %s\tEnd Time = %s\n",date1,date2); 

}
这是news.notice的一个片段:

Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu group alt.education.distance 19
Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu exit articles 19 groups 1
Feb 13 21:27:14 ringer nnrpd[11474]: lonestar.jpl.utsa.edu times user 0.470 system 0.930 elapsed 4.766
Feb 13 21:27:49 ringer nnrpd[11462]: ring42.cs.utsa.edu exit articles 0 groups 2
Feb 13 21:27:49 ringer nnrpd[11462]: ring42.cs.utsa.edu times user 2.020 system 1.430 elapsed 45.114
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu group utsa.lonestar 7
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu exit articles 7 groups 1
Feb 13 21:28:00 ringer nnrpd[11482]: lonestar.jpl.utsa.edu times user 0.520 system 0.890 elapsed 48.286
Feb 13 21:28:38 ringer innd: ME running
Feb 13 21:28:43 ringer nnrpd[11344]: lonestar.jpl.utsa.edu unrecognized NOOP
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu connect
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu exit articles 0 groups 0
Feb 13 21:29:01 ringer nnrpd[11601]: lonestar.jpl.utsa.edu times user 0.470 system 0.770 elapsed 1.456
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu connect
Feb 13 21:29:03 ringer nnrpd[11472]: ring29.cs.utsa.edu exit articles 0 groups 0
Feb 13 21:29:03 ringer nnrpd[11472]: ring29.cs.utsa.edu times user 1.360 system 0.790 elapsed 114.771
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu exit articles 0 groups 0
Feb 13 21:29:03 ringer nnrpd[11602]: lonestar.jpl.utsa.edu times user 0.530 system 0.650 elapsed 1.524
Feb 13 21:29:25 ringer nnrpd[11615]: lonestar.jpl.utsa.edu connect
我正在使用这个命令:

awk -f newsread.awk news.notice > newsread.summary
这里是newsread.summary:

            News Reader Summary


               lonestar       runner         ringer         rings          

Articles:      144686         25066          2              0              
Groups:        5282           8344           19             0              
Cs2413:        0              0              0              0              
Cs2413.d:      40             25             0              0              
User Time:     266197         83377          128            0              

Start Time = Feb 13 21:27:14    End Time = Feb 14 20:56:49

它必须是一个awk脚本。

失去双引号

$6 ~ /regex/
不是


首先去掉引号,即不是这样:

$6 ~ "/ring??.cs.utsa.edu/"
但这是:

$6 ~ /ring??.cs.utsa.edu/
引号分隔字符串,斜杠分隔常量

现在,我怀疑您的RE是错误的,因为
表示前面的字符重复零次或1次,然后再次重复相同的字符或文字问号(不确定哪一个-两种方式都没有意义),
表示“任何单个字符”。这是一个正则表达式,而不是shell globbing-具有不同含义的不同元字符

您可能希望这样:

$6 ~ /^ring..\.cs\.utsa\.edu$/

“声明”
条款[4];组[4];次[4];cs2413[4];cs2413d[4]是不必要的,可能不会做你认为他们会做的事情。在各种awk中,都不需要声明数组,并且没有这样做的机制。数组在索引时(或者在某些awk实现中,在脚本被解析时)会自动出现。很高兴知道这一点,谢谢!我会除掉他们的,就是这样!你说得对,你提供的正则表达式正是我想要的。非常感谢。