leetcode192 词频统计bash

假设 words.txt 内容如下:

the day is sunny the the
the sunny is is

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

the 4
is 3
sunny 2
day 1

你需要使用一行unix pipes实现

方法一:

awk '{for(i = 1;i <= NF;i++){++m[$i]}} END{for(k in m){print k" "m[k]}}'  words.txt | sort -nr  -k 2

awk默认逐行检索,默认以空格划分每条记录。

  • 例如这里 for(i=1;i<=NF;++i){++m[$i]}就是将每一行分隔的字段,进行词频统计。NF是分隔的字段数。
  • awk中的数组可以用作hashtable做来词频统计。
  • END{#在检索文本后的操作}

sort语法复习

  • sort -n 将字符串转数字
  • sort -r 指定顺序为从大到小
  • sort -k 2 指定第二个字段作为排序判断标准

方法二:

cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | awk '{print $2, $1}'

tr -s ' ' '\n' 是将所有连续的空格 空行删除并保证每一行只有一个字符串
sort | uniq -c 通常一起用来统计重复出现的次数。

方法三:

我们也可以用awk来去除空行并使得每行只有一个字符,

并利用awk打印

awk '{i=1;while(i<=NF){print $i;i++}}' words.txt | sort | uniq -c | sort -rn | awk '{print $2, $1}'

 

 

参考链接:

1. https://blog.csdn.net/u013246898/article/details/80240024

2. https://blog.csdn.net/wangxiaobupt/article/details/45201817

posted @ 2020-04-18 17:32  Rogn  阅读(292)  评论(0编辑  收藏  举报