• Shell WordCount:一行shell命令统计固定格式单词词频


    面试中有的让写一条shell统计WordCount

    leetcode也有这个题,链接地址

    为了简单起见,我们设定:

    • words.txt只包括小写字母和 ' ' 。
    • 每个单词只由小写字母组成。
    • 单词间由一个或多个空格字符分隔。

    words.txt 内容如下:

    the day is sunny the the
    the  sunny is is

    你的脚本应当输出(以词频降序排列):

    the 4
    is 3
    sunny 2
    day 1

    解法一:

    cat words.txt | tr -s ' ' '
    '|sort|uniq -c |sort -r|awk '{print $2" "$1}'

    cat ——浏览文件
    tr -s ——替换字符串(空格换为换行)保证了一行一个单词
    sort ——默认ASCII值排序,排序号后还会有重复
    uniq —— 只能统计并删除连续的重复行,去重,-c再输出重复次数。结果就是 ”4 abc“ abc出现了4次
    sort -r —— 反向排序,也就是从大到小。得到按频率高低的结果
    awk ——格式化输出,规定输出是先字符串再重复次数,所以先$2再$1,中间空格分隔

    解法二:

    cat words.txt | xargs -n1 | sort|uniq -c |sort -rn|awk '{print $2" "$1}'

    xargs 分割字符串 -n 1表示每行输出一个 可以加-d指定分割符
    sort
    -r : 降序排列
    -n : 以数字排序,默认是按照字符排序的。

    解法三:

    cat words.txt | sed 's/ /
    /g' | awk NF | sort | uniq -c | sort -nr | awk '{print $2 " " $1}'  

    sed搜索并替换,sed 's/要被取代的字串/新的字串/g'
    awk NF 代表一行有多少个域 (也就是一行有多少个单词)
    awk $NF代表最后一个域 (也就是最后一个单词)

  • 相关阅读:
    linux常用命令
    练习00004
    python学习第六天
    练习00003
    练习00002
    python学习第四天
    练习00001
    Linux_安装mysql踩坑日记
    Linux_更改远程登录端口以及禁止root用户登录
    redis_基础_基本使用
  • 原文地址:https://www.cnblogs.com/yangms/p/14220816.html
Copyright © 2020-2023  润新知