shell题解 | 统计每个单词出现的个数

统计每个单词出现的个数

https://www.nowcoder.com/practice/ad921ccc0ba041ea93e9fb40bb0f2786

#!/bin/bash

awk '
    { 
        for(i = 1; i <= NF; i++) {
            arr[$i]++
        } 
    } 
    END{ 
        for(i in arr) {
            print i, arr[i]
        } 
    }
' nowcoder.txt | sort -k2,2n -k1,1

# NF  当前行的字段数量,默认分隔符是空白字符(空格,制表符(Tab), 多个连续的空白字符(被视为一个分隔符))
# END语句只执行一次
# sort -k2,2n -k1,1
# -k  指定排序的关键字
# 2,2 排序的起始字段 和 结束字段; 起始第2列,结束第2列
# n   按数字进行排序
# 先按 -k2,2n 排序,再按 -k1,1 排序

自测输入

welcome nowcoder
welcome to nowcoder
nowcoder

文件里有3行内容,awk每次处理一行

第一次总循环

$i 为 welcome
arr["welcome"]    即 arr["welcome"] = 0
arr["welcome"]++  即 arr["welcome"] = 1

$i 为 nowcoder
arr["nowcoder"]    即 arr["nowcoder"] = 0
arr["nowcoder"]++  即 arr["nowcoder"] = 1

第二次总循环

$i 为 welcome
arr["welcome"]++  即 arr["welcome"] = 2

$i 为 to
arr["to"]    即 arr["to"] = 0
arr["to"]++  即 arr["to"] = 1

$i 为 nowcoder
arr["nowcoder"]++  即 arr["nowcoder"] = 2

第三次总循环

$i 为 nowcoder
arr["nowcoder"]++  即 arr["nowcoder"] = 3

执行END语句

welcome 2
nowcoder 3
to 1

sort排序

to 1
welcome 2
nowcoder 3

END

全部评论

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务