• 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
  • 相关阅读:
    pytorch深度学习实战lesson9
    MXNet中图解稀疏矩阵(Sparse Matrix)的压缩与还原
    Spring IOC 和 AOP
    算法提升:图的Dijkstra(迪杰斯特拉)算法
    Spring框架漏洞复现及解析(CVE-2016-4977、CVE-2022-22963、CVE-2017-8046、CVE-2022-22978)
    Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比
    Goland踩坑系列——Goland的go mod配置不生效的问题
    MacOS终端命令行死循环
    【SHUD】SHUD模型Windows下的编译过程
    uniapp使用第三方字体
  • 原文地址:https://blog.csdn.net/cnds123321/article/details/125813515