首页 > 试题广场 >

统计每个单词出现的个数

[编程题]统计每个单词出现的个数
  • 热度指数:32589 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
写一个bash脚本以统计一个文本文件nowcoder.txt 中每个单词出现的个数。

为了简单起见,你可以假设:
nowcoder.txt只包括小写字母和空格,每个单词只由小写字母组成,单词间由一个或多个空格字符分隔。

示例:
假设 nowcoder.txt 内容如下:
welcome nowcoder
welcome to nowcoder
nowcoder
你的脚本应当输出(以词频升序排列):
to 1 
welcome 2 
nowcoder 3 

说明:
不要担心个数相同的单词的排序问题,每个单词出现的个数都是唯一的。
示例1

输入

welcome nowcoder
welcome to nowcoder
nowcoder

输出

to 1 
welcome 2 
nowcoder 3 
cat nowcoder.txt | tr -s ' ' '\n' | sort | uniq -c | awk '{print $2" "$1}' | sort -k2n
发表于 2021-04-20 19:28:05 回复(1)
cat $1  | tr -s ' ' '\n' |sort |uniq -c|sort |awk '{print $2" "$1}'
发表于 2020-11-12 19:41:21 回复(6)
  1. shell
    tr ' ' '\n' | sort | uniq -c | awk '{print $2, $1}' | sort -nk2
  2. awk + sort
    awk '{
     for (i = 1; i <= NF; ++i)
         mp[$i]++;
    }
    END {
     for (k in mp)
         printf("%s %d", k, mp[k]);
    }' | sort -n -k1
发表于 2021-05-15 21:01:12 回复(1)
大数据中的wordcount?
发表于 2021-10-11 21:05:16 回复(1)
cat nowcoder.txt | awk '{for(i=1;i<=NF;i++){print $i}}'|sort|uniq -c| sort -n | awk '{print $2,$1}'
发表于 2021-05-27 21:49:31 回复(0)
cat  ./nowcoder.txt | awk '{for(i=1;i<=NF;i++){arry[$i]++}}END{for(key in arry){print key" "arry[key]}}'
发表于 2020-12-21 10:20:48 回复(0)
awk '{
    for(i = 1 ; i <= NF ; i++){
        array[$i] += 1; 
    }
}
END{
    for(s in array){
        print s" "array[s];
    }
}' nowcoder.txt | sort -k2n

发表于 2022-09-21 18:32:49 回复(0)
awk '{
    for (i=1; i<=NF; i++) {
        arr[$i]++
    }
} END {
    for (j in arr) {
        printf("%s %d", j, arr[j])
    }
}'
发表于 2021-09-03 17:36:31 回复(1)
declare -A map

while read linestr
do
    arr=($linestr)
    for key in ${arr[@]}
    do
        if [ -z "${map[$key]}" ];then
            map[$key]=1
        else
            ((map[$key]++))
        fi
    done
done<nowcoder.txt
mm=()
for vlaue in ${map[@]}
do
   mm[${#mm[@]}]=${vlaue}
done





for ((a=0;a<${#mm[*]};a++));do
  for ((k=$a+1;k<${#mm[*]};k++));do
    if [ ${mm[$a]} -gt ${mm[$k]} ];then
        qq=${mm[$a]}
        mm[$a]=${mm[$k]}
        mm[$k]=$qq
    fi
 done
done

for ((k=0;k<${#mm[*]};k++));do
 for key in ${!map[@]};do
    if [ ${map[$key]} -eq ${mm[$k]} ];then
        echo $key ${map[$key]}
    fi
 done
done

发表于 2020-11-11 23:24:59 回复(0)
cat nowcoder.txt | sed 's/ /\n/g' | awk '{word[$1]++}END{for(i in word) print i,word[i];}'

发表于 2021-09-16 18:22:06 回复(0)
awk '{for(i=1;i<=NF;i++){print $i}}' |sort | uniq -c | sort -n | awk '{print $2,$1}'
发表于 2024-02-16 16:40:33 回复(0)
awk '{
    if($0){
        for(i=1;i<=NF;i++){
            mp[$i]++;
        }
    }  
}END{
    for(j in mp){
        printf("%s %d\n",j,mp[j]);
    }
       
}' < nowcoder.txt | sort -k2n
发表于 2023-09-22 10:27:40 回复(0)
cat nowcoder.txt | tr ' ' '\n' | sort | uniq -c | sort | awk '{print $2 " " $1}'
发表于 2023-08-16 10:53:28 回复(0)
xargs -n1 | sort | uniq -c | sort | awk '{print $2" "$1}'

发表于 2023-08-04 22:48:45 回复(0)
awk '{for (i=1; i<=NF; i++){a[$i]++}}END{for (i in a){print i, a[i]}}' | sort -k2
发表于 2023-04-26 22:44:05 回复(0)
#shell统计一个文本文件nowcoder.txt 中每个单词出现的个数,先输出单词,再输出个数,按照个数升序排序,
# 使用tr命令将空格替换为换行符
# 使用sort命令排序并统计重复行
# 使用uniq命令去重并统计重复行
# 使用awk命令调整输出格式,先输出单词,再输出个数
# 使用sort命令按照个数升序排序
tr -s ' ' '\n' < nowcoder.txt | sort | uniq -c | awk '{print $2" "$1}' | sort -k2n
发表于 2023-04-06 10:55:07 回复(0)
awk '{for(i=1;i<=NF;i++){arr[$i]=arr[$i]?arr[$i]+1:1}} END{for(word in arr){print word" "arr[word]}}' nowcoder.txt | sort -nk 2
发表于 2023-04-02 19:32:57 回复(0)
awk 'BEGIN{RS=" "}{print $0}' nowcoder.txt |sed -r '$d' |sort |uniq -c |sort -n |awk '{print $2,$1}'

发表于 2022-10-25 22:29:12 回复(0)
grep -Eo '\b[a-z]+\b' nowcoder.txt  | awk '{ws[$0]++}END{for(w in ws)print w,ws[w]}' | sort -k2n

发表于 2022-09-19 10:27:25 回复(0)
xargs -n 1 < nowcoder.txt | awk '{words[$1]++}END{for(w in words)print w,words[w]}' | sort -k2n;

发表于 2022-09-18 10:18:11 回复(0)