『转』统计一个日志文件里,单词出现频率的shell脚本

原文地址:http://blog.csdn.net/taiyang1987912/article/details/39995175

#查找文本中n个出现频率最高的单词
#!/bin/bash
count=$1                         #$1是输出频率最高单词的个数  

cat $2 |                         #$2是目标文本文件名称也可是是字符串
tr -cs "[a-z][A-Z][0-9]" "\n" |  #tr是sed的简化,-c用前字符串中字符集的补集替换成后字符串即将不是字符和数字的单词替换换行
                                 #-s删除所有重复出现换行,只保留第一个
                                 #可以写成tr -cs "[a-z][A-Z][0-9]" "\012"或tr -cs "[a-z][A-Z][0-9]" "[\012*]"
  tr A-Z a-z |                   #将大写字母换化为小写字母
    sort |                       #对单词进行排序
      uniq -c |                  #删除文本文件中重复出现的行,-c在每列旁边显示该行重复出现的次数
        sort -k1nr -k2 |         #字符串以空格分成域,先按第一个域排序,在按第二个域排序
                                 #-k1指定第一个域,-n按数字大写排序,-r排序结果逆向显示
          head -n $count         #显示前n行  

这里的核心命令: 管道符| 、 cat  sort 、uniq -c(去重并且统计出现次数)、tr (把出现的空格[非单词] 换行)

$1是取的就是前几行最高频次的

$2是要查看的文本日志名称

-

时间: 2024-08-02 02:20:36

『转』统计一个日志文件里,单词出现频率的shell脚本的相关文章

统计apache日志文件里访问量前十的ip并按从多到少排列

解法1: cat access_log | awk  ’{print $1}’ | sort | uniq -c | sort -n -r | head -10 解法2:cat access_log | awk -F “- -” ‘{print $1}’ | sort -t . | uniq -c | sort -n -r | head -10 awk ‘{a[$1] += 1;} END {for (i in a) printf(“%d %s\n”, a[i], i);}’ 日志文件 | so

Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?

不论应用是如何部署的,我们都期望能扑捉到应用的错误日志, 解决思路: 自己写代码处理异常拦截,甚至直接在main函数中写异常拦截. stderr重定向到某个文件里 使用 syscall.Dup2 第一种方法比较简单, 我们这里主要看后两种: 使用 stderr替换的代码: package main import (     "fmt"     "os" ) func main() {     f, _ := os.OpenFile("C:\\tmp\\11

log4 配置日期为滚动类型(每天产生一个日志文件)

控制台: App.config,log4的配置,同时要在E:\MyWork\log4日志测试\   建立对应文文件夹存放log文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigur

20190829王老师发的面试题1、有一个日志文件access.log,内容如下

1.有一个日志文件access.log,内容如下 09:28:59 404 2003356554 09:29:00 200 2003232321 09:30:00 300 2003232321 09:36:00 500 2003232321 09:39:00 200 2003232321 09:40:00 400 2003232321 09:47:00 200 2003232321 ... 现在需要统计第二列包含200这个字符的总行数,请写出命令?(只用awk能不能搞定) 最优答案: [[ema

log4j实现每个线程保存一个日志文件

log4j.properties: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.Conversion

Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)

要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释开头,接着判断是否是块注释结尾,再判断是否是单行注释或者空白行,若都不是则是有效代码,统计行数+1. 对于文件夹路径,采用递归的方法判断子条目是文件还是文件夹,是文件就调用静态统计方法.源代码: public class CalculateRow { public static void main(

统计一个字符串中的单词的个数,并打印各个单词

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:Word:6 Shen zhen is a beautiful city!*/ #include<stdio.h> #define SIZE 1000 void wordCount(char *str) { int count = 0, flag = 0; char *p = str; while (*p != '\0'){ while (*p == 32){ if (*(p + 1) == 0){/

统计日志文件里访问量前十的ip并按从多到少排列

Apache座位web服务器.访问日志名为ex.log 先找出IP段,然后进行数量统计,最后对数量进行数量排序,取出最大值. # cut -d "" -f 1 ex.log|uniq -c|sort -r|head -1|awk '{print $2}' 1.取出IP段: # cut -d " " -f 1 clientuser.log 127.0.0.1 127.0.0.1 192.168.1.100 192.168.1.100 192.168.1.100 192

统计大文件里单词

转载统计大文件里,频数最高的10个单词,(C# TPL DataFlow版) 最近公司搞了一个写程序的比赛,要求从2G的文件里统计出出现频率最高的10个单词. 最开始的想法是使用字典树,后来发现字典树更适合用在找前缀上,在查找没有hash表效率高. 之后使用Hash表+DataFlow完成了功能,2G的文件处理在20秒以内(其实我有信心优化到10秒以内,但是太折腾了). 这是我的设计图: 为什么要形成那么多结果?因为我不想写锁,写锁会降低很多效率,而且也失去了线程的意义,每个线程做自己的工作,