zoukankan      html  css  js  c++  java
  • shell awk 统计文件词频

    现有文件file,如何统计输出file中每个单词的词频,并按照词频排序?

    awk -F '[:/]' '{ for(a=1;a<=NF;a++) {if($a in array) array[$a]++ ;else if(length($a)!=0) array[$a]=1; }} END{for(aa in array) printf "%-10s %s
    ", aa,array[aa]} ' file | sort -t ' ' -nr -k2
    

    各参数含义:

    awk -F '[ '']+'  '{           # -F命令自定义分隔符,此处使用正则表达式
        for(a=1;a<=NF;a++) {      # NF为每行分割后的字段数,遍历这些字段
            if($a in array)       # 如果字段在array数组中(可以放键值对)键为单词,值为词频
                array[$a]++ ;     # 数组的值 +1 
            else if(length($a)!=0)  # 如果字段长度不为0,也不再数组中
                array[$a]=1;        # 值为1
            }
        } 
        END{                     # END命令在处理完最后一行后才执行
            for(aa in array)     # 遍历数组
                print aa,array[aa]} '     # 打印键,值
    words.txt | sort -t ' ' -nr -k2   # 管道命令进行sort排序;-t自定义分隔符,-n按照数字类型排序,-r反序,-k2:用字段2排序
    
    

    现有文件:a.txt,如何只输出[host]下的所有属性?

    [name]
        aaa
        bbb
        ccc
    [path]
        lasf
        lasdf
        lsioe
    [host]
        192.1681.11
        29u342.2348
        293
    [title]
        lasod
        lasjdoife
        lksjfoe
    
    $ awk 'BEGIN{ex=0} {if(/[host]/){ ex=1; print $0;} else if(ex==1 && !/[.*]/) print $0; else ex=0;}' a.txt
    [host]
        192.1681.11
        29u342.2348
        293
    
  • 相关阅读:
    移动web开发之flex布局(弹性布局)
    移动web开发之流式布局
    移动端基础
    3D变形(CSS3) transform
    动画(CSS3) animation
    2D变形(CSS3) transform
    过渡(CSS3)
    CSS精灵技术(sprite)
    字体图标
    伸缩布局(CSS3)
  • 原文地址:https://www.cnblogs.com/wztshine/p/13807311.html
Copyright © 2011-2022 走看看