Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Linux 按小时数行_Linux_Unix_Awk - Fatal编程技术网

Linux 按小时数行

Linux 按小时数行,linux,unix,awk,Linux,Unix,Awk,计算我们每小时或每分钟看到某一行的次数的命令是什么 文件: 我希望看到的输出: 按分钟计算: Nov 26 08:50 2 Nov 26 08:51 5 按小时计算: Nov 26 08 7 这可以通过uniq完成: $ uniq -w9 -c file # by hour 7 Nov 26 08:50:51 $ uniq -w12 -c file # by minute 2 Nov 26 08:50:51 5

计算我们每小时或每分钟看到某一行的次数的命令是什么

文件:

我希望看到的输出:

按分钟计算:

Nov 26 08:50    2
Nov 26 08:51    5
按小时计算:

Nov 26 08       7

这可以通过
uniq
完成:

$ uniq -w9 -c file       # by hour
      7 Nov 26 08:50:51
$ uniq -w12 -c file      # by minute
      2 Nov 26 08:50:51
      5 Nov 26 08:51:09
-w
比较的字符不得超过前
n
个字符

-c
按出现次数为行添加前缀。

按小时:

awk '{split($3,a,":");b[$1" "$2" "a[1]]++}END{for(i in b)print i,b[i]}' your_file
测试如下:

> awk '{split($3,a,":");b[$1" "$2" "a[1]":"a[2]]++}END{for(i in b)print i,b[i]}' temp
Nov 26 08:50 2
Nov 26 08:51 5
>
按分钟计算:

awk '{split($3,a,":");b[$1" "$2" "a[1]":"a[2]]++}END{for(i in b)print i,b[i]}' your_file
测试如下:

> awk '{split($3,a,":");b[$1" "$2" "a[1]]++}END{for(i in b)print i,b[i]}' temp
Nov 26 08 7

awk one liner可在一次拍摄中按小时和分钟计数:

awk -F: '{h[$1]++;m[$1":"$2]++;}END{for(x in h)print x,h[x]; print "---"; for(x in m)print x,m[x]}' file
试验

输出

Nov 26 08 7
---
Nov 26 08:50 2
Nov 26 08:51 5

谢谢大家的回答:)帮了大忙。如果日期改变了怎么办?您是在寻找所有日期的08:50输出,还是每天的08:50输出?“但是,如果写入日期<10而不带前导0会怎么样?哦,等等,它会工作的。”。干得好+1这很好,但我必须指出,此解决方案仅适用于Linux。*BSD(包括OSX)中的
uniq
不包括
-w
选项。@ghoti更准确地说,该解决方案需要GNU实现uniq,该uniq可以安装在任何操作系统上。这是真的。如果在FreeBSD中安装coreutils,您需要的命令实际上被称为
guniq
。我只为子孙后代补充这一点。答案仍然很好。:-)也可以在Solaris上工作。假设这是按日期/时间统计文件,下面是一个从ls开始的示例。这个特殊的例子以10小时计算。ls-l/foo/bar*| nawk'{print$6”“$7”“$8}'| uniq-w7-c感谢这个,正是我需要的。做一个管道和排序“|排序”也可以让一切都按正确的顺序进行。
kent$  echo "Nov 26 08:50:51
Nov 26 08:50:51
Nov 26 08:51:09
Nov 26 08:51:09
Nov 26 08:51:09
Nov 26 08:51:09
Nov 26 08:51:40"|awk -F: '{h[$1]++;m[$1":"$2]++;}END{for(x in h)print x,h[x]; print "---"; for(x in m)print x,m[x]}'    
Nov 26 08 7
---
Nov 26 08:50 2
Nov 26 08:51 5