对过去30天进行求和的awk脚本
我有一个awk代码。但我不知道如何修改它,使之只和过去的30天 我的awk脚本:对过去30天进行求和的awk脚本,awk,Awk,我有一个awk代码。但我不知道如何修改它,使之只和过去的30天 我的awk脚本: awk -F";" '{sum+=$3} END{if (sum>1000) print "error=1"; else error="0"}' /tmp/$username 我的意见: 2014-05-19:10:54:36;coolpad;10;0;78.92.146.183;10.8.0.18;185;coolpad;END; 2014-07-19:12:10:42;coolpad;1;0;78.92
awk -F";" '{sum+=$3} END{if (sum>1000) print "error=1"; else error="0"}' /tmp/$username
我的意见:
2014-05-19:10:54:36;coolpad;10;0;78.92.146.183;10.8.0.18;185;coolpad;END;
2014-07-19:12:10:42;coolpad;1;0;78.92.146.183;10.8.0.18;4415;csib;END;
2014-07-19:12:27:35;coolpad;50;0;78.92.146.183;10.8.0.18;748;coolpad;END;
2014-07-19:12:29:08;coolpad;2;0;78.92.146.183;10.8.0.18;88;coolpad;END;
2014-07-19:12:34:34;coolpad;7;0;78.92.146.183;10.8.0.18;291;coolpad;END;
2014-07-19:12:35:03;coolpad;4;0;78.92.146.183;10.8.0.18;26;coolpad;END;
2014-09-19:12:35:16;coolpad;0;0;78.92.146.183;10.8.0.18;12;coolpad;END;
2014-09-19:12:38:21;coolpad;0;0;78.92.146.183;10.8.0.18;60;coolpad;END;
2014-09-19:12:39:20;coolpad;0;0;78.92.146.183;10.8.0.18;58;coolpad;END;
2014-09-19:12:40:35;coolpad;0;0;78.92.146.183;10.8.0.18;74;coolpad;END;
2014-09-19:12:43:08;coolpad;0;0;78.92.146.183;10.8.0.18;118;coolpad;END;
2014-09-19:12:43:23;coolpad;0;0;78.92.146.183;10.8.0.18;14;coolpad;END;
2014-09-19:12:50:54;coolpad;0;0;78.92.146.183;10.8.0.18;349;coolpad;END;
2014-09-19:12:51:42;coolpad;0;0;78.92.146.183;10.8.0.18;47;coolpad;END;
2014-09-19:12:52:22;coolpad;0;0;78.92.146.183;10.8.0.18;39;coolpad;END;
2014-09-19:12:57:03;coolpad;0;0;78.92.146.183;10.8.0.18;281;coolpad;END;
所以数量是第三
请帮帮我,谢谢。因为30天前我们有
日期
:
$ date -d"-30 days" "+%Y-%m-%d:%T"
2014-08-20:15:55:42
让我们将该值与awk
进行比较:
$ awk -F";" -v d="$(date -d"-30 days" "+%Y-%m-%d:%T")" '$1>d {sum+=$3} END{print sum+0}' file
0
解释
将输入字段分隔符设置为-F”;“
代码>
以YYYY-MM-DD:HH:MM:SS格式提供今天的日期-30天-vd=“$(日期-d“-30天”+%Y-%m-%d:%T”)”
如果日期大于给定日期,请添加第三列$1>d{sum+=$3}
打印结果。如果未设置END{print sum+0}
,它将使用sum
技巧返回+0
0
请参见匹配本身:
$ awk -F";" -v d="$(date -d"-30 days" "+%Y-%m-%d:%T")" '$1>d' a
2014-09-19:12:35:16;coolpad;0;0;78.92.146.183;10.8.0.18;12;coolpad;END;
2014-09-19:12:38:21;coolpad;0;0;78.92.146.183;10.8.0.18;60;coolpad;END;
2014-09-19:12:39:20;coolpad;0;0;78.92.146.183;10.8.0.18;58;coolpad;END;
2014-09-19:12:40:35;coolpad;0;0;78.92.146.183;10.8.0.18;74;coolpad;END;
2014-09-19:12:43:08;coolpad;0;0;78.92.146.183;10.8.0.18;118;coolpad;END;
2014-09-19:12:43:23;coolpad;0;0;78.92.146.183;10.8.0.18;14;coolpad;END;
2014-09-19:12:50:54;coolpad;0;0;78.92.146.183;10.8.0.18;349;coolpad;END;
2014-09-19:12:51:42;coolpad;0;0;78.92.146.183;10.8.0.18;47;coolpad;END;
2014-09-19:12:52:22;coolpad;0;0;78.92.146.183;10.8.0.18;39;coolpad;END;
2014-09-19:12:57:03;coolpad;0;0;78.92.146.183;10.8.0.18;281;coolpad;END;
不知道为什么,但它不起作用。:/这是完整的剧本:知道这是丑陋的,但工作。(除了30天计算的加号代码)@csib为什么要声明awk语句?因为以后我需要错误的值,如果没有这个值,我就无法从if/while中得到它。@csib
END{if(sum>1000)print“error=1”;否则“error=1”}
没有多大意义。您在else
中缺少一个print
。