awk吧 关注:104贴子:293

本贴专门解答awk相关的计算问题,每周1至周5回答

只看楼主收藏回复

如题


IP属地:北京1楼2013-05-23 11:15回复
    cat /data1/apache2/logs/access_log|awk'{if($(NF-1)>0) print $4}'|awk -F':' '{print $1 ":" $2":" $3 "]"}'|sort|uniq -c
    这样统计apache日志,每分钟超时的访问数,怎么样,求大神评价一二;


    IP属地:天津3楼2013-05-24 11:45
    收起回复
      怎么看不到你的回复了呢?你删了?


      4楼2013-05-29 22:07
      收起回复
        怎么把两个文本合并成一个喃?我用NR,FNR来做,貌似不得行


        5楼2013-05-30 10:17
        回复
          哦,我已经合并成功了,呵呵,但是问题是现在想把方差算出来后方在$7列,求助~


          6楼2013-05-30 10:42
          收起回复
            我又来了,呵呵,我想判断一个文本,如果$2>500,则判断是否($4-$2)/$2 >50%,如果是的话,就调用Wiondows里面的一个音乐文件a,不是的话,直接跳过,检查下一行。如果$2在100~500,则判断是否$4/$2>3,如果是的话,就调用Wiondows里面的一个音乐文件b,不是的话,直接跳过,检查下一行。我肯定$2的数据肯定在这个假设条件范围内~
            请问这个应该怎么做啊


            7楼2013-06-04 19:05
            收起回复
              {
              if($2>500&&($4-$2)/$2>50%){
              getline d<\"a.rmv\";print d // 这里用$0 会让程序造成误会,所以加了一个d,也是geline的一种用法
              }else{
              //todo
              }
              }


              IP属地:北京8楼2013-06-06 19:16
              收起回复


                IP属地:北京9楼2013-06-06 19:18
                回复
                  我先把问题简单话,只做第一个,满足条件的输出到新的文件中。我是把写的命令保存成.bat的文件,然后运行。
                  awk "{if($2>500&&($4-$2)>0.5){print $0}else{($2<500&&$2>100&&$4/$2>3){print $0}}}" data.txt>result.txt
                  但是提示syn error


                  10楼2013-06-07 13:53
                  回复
                    哦,我弄出来了,但是有遇到一个疑问,呵呵,先把我改好了的写这
                    awk "{if($2>500&&($4-$2)>0.5){print $0}else if{($2<500&&$2>100&&$4/$2>3){print $0}}END{print \"finish\"}" data.txt>result.txt
                    但是新的问题是$4-$2很有可能为负数,我想取绝对值怎么弄啊?


                    11楼2013-06-07 14:19
                    回复
                      哦,呵呵,我又晓得了,用selector ? if-true-exp : if-false-exp 可以


                      12楼2013-06-07 14:26
                      收起回复
                        我碰到了这样的情况,一个文本以\t字符串为分隔的,如下
                        2013-07-01 23:59:58\thttp://\t8f563deba115c71958824ed1089da7b8\tapp\t\t3.3.1\t3958
                        我想用awk取其中的一些,这样写awk -F\t '{print
                        $1,$2}' mobile_search_log20130702|head得到
                        2013-07-01 23:59:58\ h
                        这样写awk -F\\t
                        '{print $1}' mobile_search_log20130702|head得到还是全的,即没有找到这个分隔符
                        这样写awk -F'\t'
                        '{print $1}' mobile_search_log20130702|head也是得到全的
                        这样写awk -F'\\t'
                        '{print $1}' mobile_search_log20130702|head还是得到全的


                        15楼2013-07-04 10:40
                        收起回复
                          本人新手,不了解脚本的排序语法,我想在一个脚本中按照第5个字段的数值大小进行逆向排序排序,可是运行如下代码之后输出结果并没有排序,求高手指教!
                          #!/usr/bin/awk -f
                          BEGIN {
                          FS="|"
                          }
                          {
                          if(($1=="1"||$1=="2")&&($3=="1"||$3=="3"||$3=="4"))
                          print $5,"|",$1,"|",$2,"|",$3,"|",$4,"|">"screen.txt"
                          sort -rn;
                          }
                          END {
                          }


                          16楼2013-07-08 10:49
                          收起回复
                            楼主好,我是小白。现在有两个文件,每个文件中的记录都有5个域,现在需要找到两个文件中特定3个域相同的记录,应该怎么实现。


                            IP属地:重庆17楼2015-07-17 11:59
                            收起回复
                              有一个文件:
                              sdflksjdfskld.23 120.210.180.16
                              sdflksjdfskld.23 120.210.180.18
                              sdflksjdfskld.23 120.210.180.17
                              然后有一个./ipjudge 120.34.342.43 可以输出ip地址所在位置
                              求问如何在上面的文件ip地址后面一行添加使用ipjudge输出后的位置的信息?


                              18楼2015-08-28 15:30
                              收起回复