Chinaunix
标题:
AWK 与 DATE 运用求解
[打印本页]
作者:
老狼000
时间:
2014-04-15 14:32
标题:
AWK 与 DATE 运用求解
本帖最后由 老狼000 于 2014-04-15 16:55 编辑
有a.txt
2014-04-11 16:15:20 123.125.71.100
2014-04-11 16:25:13 123.125.71.100
2014-04-11 16:25:14 123.125.71.100
2014-04-11 16:39:30 123.125.71.100
2014-04-11 16:39:30 123.125.71.100
.............
有以上三列,要对$1$2转成时间戳 date -d "$1$2" +%s ,对应IP
1、需求如下 b.txt
1397491200 123.125.71.100
1397491200 123.125.71.100
1397491200 123.125.71.100
1397491200 123.125.71.100
..................
awk 'BEGIN{FS="";p="date -d "$1$2" +%s"} END {print $p,$3}' a.txt /////求正确解法
2、需求2 对于 b.txt中
在同一IP下,计算$1的差, cha=$1最大值-$1最小值 .///修正 成 最大值与最小值之差
c.txt
cha1 123.125.71.100
cha2 123.125.71.101
......
作者:
ly5066113
时间:
2014-04-15 15:20
回复
1#
老狼000
try:
awk '{print mktime(gensub(/[-:]/," ","g",$1" "$2)),$3}' a.txt > b.txt
复制代码
作者:
不能超过15字
时间:
2014-04-15 15:25
awk '{a[$2]+=$1}END{for(i in a) print a[i],i}' b.txt >c.txt
复制代码
作者:
Herowinter
时间:
2014-04-15 15:31
awk '{cmd="date -d \""$1" "$2"\" +%s";cmd|getline p;print p,$3;close(cmd)}' a.txt>b.txt
1397204120 123.125.71.100
1397204713 123.125.71.100
1397204714 123.125.71.100
1397205570 123.125.71.100
1397205570 123.125.71.100
复制代码
回复
1#
老狼000
awk '!min[$2]{min[$2]=$1} {if($1<min[$2])min[$2]=$1;if($1>max[$2])max[$2]=$1} END{for(i in min)print min[i]+max[i],i}' b.txt
2794409690 123.125.71.100
复制代码
作者:
老狼000
时间:
2014-04-15 15:46
3Q 你就是实现第二个需求
回复
3#
不能超过15字
作者:
老狼000
时间:
2014-04-15 15:48
赞,你的也可以。速度 很快
回复
2#
ly5066113
作者:
yestreenstars
时间:
2014-04-15 15:57
awk '{"date -d \042"$1" "$2"\042 +%s" | getline t;print t,$3}'
复制代码
作者:
itfly3
时间:
2014-04-15 15:58
第一题:awk '{ "date -d \""$1" "$2"\" +%s"|getline p ;print p,$3}' a.txt
第二题:“不能超过15字”
作者:
老狼000
时间:
2014-04-15 16:06
3Q 。请问t 是怎么定义
回复
8#
yestreenstars
作者:
yestreenstars
时间:
2014-04-15 16:23
回复
10#
老狼000
t是自定义的,随便你想用哪个字母都行~
作者:
老狼000
时间:
2014-04-15 17:16
如果是差呢
回复
3#
不能超过15字
作者:
老狼000
时间:
2014-04-16 09:16
如果是 求同一IP下 最大值 与最小值 之差 呢
回复
9#
itfly3
作者:
Herowinter
时间:
2014-04-16 09:40
回复
13#
老狼000
awk '!min[$2]{min[$2]=$1} {if($1<min[$2])min[$2]=$1;if($1>max[$2])max[$2]=$1} END{for(i in min)print max[i]-min[i],i}' b.txt
复制代码
作者:
老狼000
时间:
2014-04-16 09:48
感谢,学习下
回复
14#
Herowinter
作者:
不能超过15字
时间:
2014-04-16 09:49
cat 1.dat|awk '{
if(sum[$2]++ <1)
{
min[$2]=$1
}
if(min[$2] >= $1)
{
min[$2]=$1
}
if(max[$2] < $1)
{
max[$2]=$1
}
}
END{
for (i in min)
print max[i]-min[i],i
}'
复制代码
回复
12#
老狼000
1.dat就是你的文件
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2