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:
  1. awk '{print mktime(gensub(/[-:]/," ","g",$1" "$2)),$3}' a.txt > b.txt
复制代码

作者: 不能超过15字    时间: 2014-04-15 15:25
  1. awk '{a[$2]+=$1}END{for(i in a) print a[i],i}' b.txt >c.txt
复制代码

作者: Herowinter    时间: 2014-04-15 15:31
  1. awk '{cmd="date -d \""$1" "$2"\" +%s";cmd|getline p;print p,$3;close(cmd)}' a.txt>b.txt

  2. 1397204120 123.125.71.100
  3. 1397204713 123.125.71.100
  4. 1397204714 123.125.71.100
  5. 1397205570 123.125.71.100
  6. 1397205570 123.125.71.100
复制代码
回复 1# 老狼000
  1. 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
  2. 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
  1. 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
  1. 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
  1. cat 1.dat|awk '{
  2.         if(sum[$2]++ <1)
  3.         {
  4.             min[$2]=$1
  5.         }
  6.         if(min[$2] >= $1)
  7.         {
  8.             min[$2]=$1
  9.         }
  10.         if(max[$2] < $1)
  11.         {
  12.             max[$2]=$1
  13.         }
  14. }
  15. END{
  16.     for (i in min)
  17.         print max[i]-min[i],i
  18.     }'
复制代码
回复 12# 老狼000

1.dat就是你的文件
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2