首页 > 试题广场 >

域名进行计数排序处理

[编程题]域名进行计数排序处理
  • 热度指数:19652 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设有一些域名,存储在nowcoder.txt里,现在需要写一个shell脚本,将域名取出并根据域名进行计数排序处理(降序)。
假设nowcoder.txt内容如下:
http://www.nowcoder.com/index.html
http://www.nowcoder.com/1.html
http://m.nowcoder.com/index.html
你的脚本应该输出:
2 www.nowcoder.com
1 m.nowcoder.com

输入描述:
1


输出描述:
1
示例1

输入

http://www.nowcoder.com/index.html
http://www.nowcoder.com/1.html
http://m.nowcoder.com/index.html

输出

2 www.nowcoder.com
1 m.nowcoder.com
awk -F "/" '{print $3}' nowcoder.txt | sort | uniq -c | sort -r | awk '{print $1,$2}'

发表于 2025-01-16 23:10:35 回复(0)
#!/bin/bash
awk -F "/" '{print $3}' nowcoder.txt|sort|uniq|awk '{print NR" "$0}'|sort -r
发表于 2023-10-24 20:18:12 回复(0)
#!/bin/bash
a=$(cat nowcoder.txt | cut -d / -f3)
b=$(echo $a | xargs -n1 | sort -u)
for i in $b
do
    c=0
    for z in $a
    do
        if [ $i == $z ]
            then
            let c++
            fi
    done
    d+=("$c $i")
done
echo ${d[*]}|xargs -n2|sort -n -r
发表于 2023-10-13 14:45:11 回复(0)
# 方法1: 使用awk
#  打框架:awk -F "/" 'BEGIN{}{}END{}' nowcoder.txt | sort -k1
#  借用个字典,启动key是域名, value是次数, 则awk -F "/" 'BEGIN{dict}{}END{for(i in dict) {printf("%d %s\n", i, dict[i])}}' nowcoder.txt | sort -rk1
#  BEGIN可以省略不写,则awk -F "/" '{}END{for(i in dict) {printf("%d %s\n", i, dict[i])}}' nowcoder.txt | sort -rk1
#  最终得到如下:
awk -F "/" '{if($3!=""){dict[$3]+=1}}END{for(i in dict) {printf("%d %s\n", dict[i], i)}}' nowcoder.txt | sort -rk1

# 方法2: 使用最笨的while read line
declare -A dict # 其中key是域名, value是次数
while read -r line; do
    # 首先将前缀去掉
    data=${line#http://}
    # 然后将后缀去掉
    data=${data%%/*}
    # 将其放进字典里面取
    # 如果不存在该key,则赋值为1, 否则则加1
    if [[ -z ${dict[${data}]} ]]; then
        dict[${data}]=1
    else
        ((dict[${data}]+=1))
    fi
done < nowcoder.txt
# 打印字典
# shellcheck disable=SC2068
for key in ${!dict[@]}; do
    echo "${dict[${key}]} ${key}"
done | sort -rk1

# 方法3:借助uniq, 现将域名过滤出来,然后按照名字排序,排序后去重,再按照次数排序, 最后按照格式输出
awk -F '/' '{print $3}' nowcoder.txt | sort | uniq -c | sort -rk1 | awk -F " " '{print $1" "$2}'

发表于 2023-03-20 11:43:35 回复(0)
#莫名其妙就超过95%的运行时间和内存?
#这题的思路较为简单,我遇到的难点在与数组arr的初始化问题
#通过以下四行来解决该问题
awk -F '/' '{
if(!arr[$3]){
arr[$3]=0
}
for(i in arr){
if(i==$3){
arr[i]++
}
}
}END{
for(i in arr){
printf("%d %s\n",arr[i],i)
}
}'  | sort -rn -k1

发表于 2022-09-09 17:21:07 回复(0)

用一下gensub

awk '{str = gensub(/(.*)\/\/([a-zA-Z0-9.]*)\/(.*)/, "\\2", "g"); a[str]++} END{for(i in a){print(a[i]" "i)}}' nowcoder.txt | sort -nr
发表于 2022-08-27 20:56:37 回复(0)
awk -F "/" '{print $3}' nowcoder.txt |sort -r |uniq -c|awk '{print $1" "$2}'
发表于 2022-07-31 19:24:58 回复(0)
awk -F '/' '{
a[$3]++
}END{
for (i in a){
printf("%s %s\n",a[i],i)
}
}' | sort -k 1 -r
发表于 2022-07-17 16:53:58 回复(0)
sed 's/http:\/\///;s/\/.*//' nowcoder.txt |
awk '
    {
        ++a[$0]
    }
    END{
        for(x in a) {
            printf("%d %s\n", a[x],x)
        }
    }' | sort -rk 1
发表于 2022-07-16 21:12:08 回复(0)
while read line;
do
    line=${line#*//}; echo ${line%%/*} | awk '{a[$0]++}END{for(i in a){print a[i],i}}'
done


为啥这样统计到的都是1,想不通,求大佬指点
发表于 2022-07-14 14:41:44 回复(1)
awk -F"/" '{print $3}' nowcoder.txt |sort -r |uniq -c|awk -F" " '{print $1,$2}'

第一步:匹配出域名
awk -F"/" '{print $3}' nowcoder.txt 
第二步:后采用倒序并且唯一计数 
awk -F"/" '{print $3}' nowcoder.txt |sort -r |uniq -c
第三步:再去除空格
awk -F"/" '{print $3}' nowcoder.txt |sort -r |uniq -c|awk -F" " '{print $1,$2}'

发表于 2022-07-12 17:44:39 回复(0)
awk -F / '{print $3}' nowcoder.txt | sort -r| uniq -c | awk '{print $1,$2}' 
发表于 2022-07-09 12:47:02 回复(0)
awk -F/ '{print $3}' nowcoder.txt | sort -nr | uniq -c | awk '{print $1,$2}'
第一个awk获取域名,然后逆序去重排序,第二个awk获取重复次数和域名,让显示结果左边没空格
发表于 2022-06-07 20:15:44 回复(0)
awk -F "/" '{a[$3]+=1}END{for(x in a){print a[x], x}}' | sort -r -k 1
发表于 2022-05-10 15:31:11 回复(0)
awk -F "/" '{ print $3}' nowcoder.txt | sort | uniq -c | sort -nr | awk '{print $1,$2}'
发表于 2022-05-08 17:49:12 回复(0)