码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux脚本练习之script075-域名进行计数排序处理


    script075

    题目

    注:题目来源于 SHELL18 域名进行计数排序处理 。

    假设我们有一些域名,存储在 nowcoder.txt 里,现在需要你写一个脚本,将域名取出并根据域名进行计数排序处理。

    假设nowcoder.txt内容如下:

    http://www.nowcoder.com/index.html
    http://www.nowcoder.com/1.html
    http://m.nowcoder.com/index.html
    
    • 1
    • 2
    • 3

    你的脚本应该输出:

    2 www.nowcoder.com
    1 m.nowcoder.com
    
    • 1
    • 2

    脚本一

    实际上就是提取网站地址的域名,首先使用 awk 命令取出第三列字段(通过 / 进行分隔),然后使用 sort 命令进行排序,再通过 uniq -c 命令去重并统计重复次数,再通过 sort -nr 按照重复次数倒序排序,最后通过 sed 命令去重每行开头的空格。

    在这里插入图片描述

    awk -F "/" '{print $3}' nowcoder.txt | sort | uniq -c | sort -nr | sed 's/^[ \t]*//g'
    
    • 1

    脚本二

    使用 awk 命令编程,同样通过 / 字符进行分隔行,然后将第三个字段域存储到关联数组中,并记录它们的出现次数;最后在 END{} 中循环遍历关联数组中,输出键名和对应的键值。注意进行排序处理。

    awk -F "/" '{
      for(i=1;i<=NF;i++){
        if(i==3){
          arr[$i]++
        }
      }
    } END{
      for(k in arr){
        printf("%d %s\n", arr[k], k)
      }
    }' nowcoder.txt | sort -r -k 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    脚本三

    跟脚本二的原理一样,都是把字段存储到关联数组中,并对出现次数进行计数。只不过是通过 shell 脚本编程实现,而非 awk 编程实现。

    #!/bin/bash
    
    # 声明关联数组
    declare -A arr 
    
    # 循环读取文本行
    while read line; do
      # 删除 // 前面的所有内容
      line=${line#*//}
      # 删除 / 后面的所有内容
      line=${line%%/*}
      # 存储到关联数组中并计数
      arr[$line]=$[ ${arr[$line]} + 1 ]
    done < nowcoder.txt
    
    # 为了能对结果排序,所以要进行处理
    result=""
    # 循环打印关联数组,对它们进行拼接
    for k in ${!arr[@]}; do 
      # 如果是第一次则进行赋值
      if [ "${result}" == "" ]; then
        result="${arr[$k]} ${k}"
      # 如果不是第一次则需要对之前的内容进行拼接,通过换行符拼接  
      else
        result="${arr[$k]} ${k}""\n${result}" 
      fi
    done
    
    # 然后使用 sort 命令进行排序
    echo -e "${result}" |  sort -r -k 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    SIEM 体系结构的组件
    uniapp实现拍照涂鸦
    Python实现print输出至日志文件
    【启扬方案】基于启扬安卓屏一体机的医疗手推车解决方案
    AVS3中的intra string copy(ISC)
    【前端杂文】 axios的AxiosResponse分析
    【JavaEE进阶系列 | 从小白到工程师】JavaEE中的迭代器,并发修改异常与增强for循环,一文上手使用
    【PyGIS】ERA5降雨蒸散发数据预处理
    重磅联合!飞桨携手Apollo共建Paddle3D自动驾驶感知能力
    原辅料采购进厂----药品生产管理系统之化药原辅料
  • 原文地址:https://blog.csdn.net/cnds123321/article/details/125813515
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号