首页 > 试题广场 >

域名进行计数排序处理

[编程题]域名进行计数排序处理
  • 热度指数: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
cat nowcoder.txt | cut -d "/" -f 3 | sort -r | uniq -c | sed 's/^ *//'
发表于 2022-02-19 00:11:33 回复(0)
方法一:
#!/bin/bash
:<<EOF
思路:
1.awk的关联数组自动计算某个字符串出现的次数以及只存储该字符串一次,然后按格式输出次数和字符串
2.用sort对第一列次数进行升序排序
3.将每行存入awk的索引数组,下标用行号,逆序输出数组即可完成升序的反转降序排列
EOF

cat nowcoder.txt | awk -F "[/]+" '{
    let arr[$2]++; #对第二列每个字符串出现的次数进行统计
}END{
    for(k in arr){
        printf "%d %s\n",arr[k],k;
    }
}' | sort -k 1 | awk '{arr[NR] = $0}
END{
    for(i = NR;i >=1;i--) print arr[i];
}'

方法二:
#!/bin/bash
:<<EOF
方法2:
1.awk的关联数组自动计算某个字符串出现的次数以及只存储该字符串一次,然后按格式输出次数和字符串
2.用sort -r对第一列次数进行降序排序

EOF

cat nowcoder.txt | awk -F "[/]+" '{
    let arr[$2]++; #对第二列每个字符串出现的次数进行统计
}END{
    for(k in arr){
        printf "%d %s\n",arr[k],k;
    }
}' | sort -r


方法三:
#!/bin/bash
#方法3:获取第二列域名 + sort排序 + uniq -c计算重复次数 + sort按第一列降序排序 + awk调整输出格式

cat nowcoder.txt | awk -F "[/]+" '{print $2}' | sort | uniq -c | sort -r | awk -F "[ ]+" '{
    printf "%d %s\n",$2,$3;}'

发表于 2023-10-13 15:06:00 回复(0)
awk -F "/" '{
    for(i=1;i<=NF;i++){
        if(i==3){
            a[$i]+=1
        }
    }
}END{
    for(x in a){
        printf("%d %s\n",a[x],x)
    }
}' nowcoder.txt|sort -rk 1
发表于 2021-12-15 15:16:43 回复(1)
shell
declare -A map
while read line
    do
        tmp=(${line//\// })
        ((map[${tmp[1]}]++))
    done < nowcoder.txt
function InsertSort(){
    tmp=()
    for ve in ${map[*]}
        do
            tmp[${#tmp[*]}]=$ve
        done
    q=${#tmp[*]}
    for ((i=0;i<$q;i++))
        do
            for ((j=$i+1;j<$q;j++))
                do
                    if [ ${tmp[$i]} -lt ${tmp[$j]} ];then
                        t=${tmp[$i]}
                        tmp[$i]=${tmp[$j]}
                        tmp[$j]=$t
                    fi
                done
        done
}
InsertSort
for ((i=0; i<$q; i++))
    do
        for ve in ${!map[*]}
            do
                if [ ${tmp[$i]} -eq ${map[$ve]} ];then
                    printf "${map[$ve]} $ve\n"
                fi
            done
    done
awk
awk -F "/" '{
    arr[$3]++
} END {
    for (i in arr) {
        printf("%d %s\n", arr[i], i)
    }
}' | sort -r


发表于 2021-11-26 11:28:43 回复(0)
awk -F "/" '{print $3}' nowcoder.txt | sort -r |uniq -c |sed 's/^ *//'


发表于 2025-08-19 18:54:46 回复(0)
sed 's#http://##g' nowcoder.txt | awk -F '/' '{print$1}' | sort | uniq -c | sort -r | awk '{print$1,$2}'
发表于 2025-03-19 23:09:32 回复(0)
为什么uniq -c之后每行统计数字前会有空格呀
发表于 2025-01-26 17:20:59 回复(0)
awk -F "/" '{print $3}' nowcoder.txt | sort | uniq -c | sort -r | awk '{print $1,$2}'

发表于 2025-01-16 23:10:35 回复(0)
 cat nowcoder.txt  |cut -d "/" -f 3 |uniq -c | sort -nr 
发表于 2024-12-10 09:56:50 回复(0)
#!/bin/bash

sed -n 's|.*//\([^/]*\)/.*|\1|p' nowcoder.txt | sort | uniq -c | sort -n -k 1,1r | awk '{print $1,$2}'

发表于 2024-09-26 11:11:31 回复(0)
cat "$1" | sed -r 's/http[s]?:\/\///; s/\/.*//' | sort | uniq -c | sort -nr
发表于 2024-09-03 10:19:44 回复(0)
awk -F'/' '{print $3}' nowcoder.txt|sort|uniq -c|sort -rn
为什么这行打印完会有空格存在导致格式错误
发表于 2024-08-08 11:46:28 回复(0)
file="nowcoder.txt"
cat $file | awk -F '/'  '{
    for(i=1;i<NF;i++){
        if($i ~ '/.*[.].*[.].*/'){
        print $i
        }
    }
}' |sort -nr | uniq -c | sort -nr | awk '{print $1, $2}'
发表于 2024-07-03 19:13:46 回复(0)
#!/bin/bash

while IFS= read -r line; do
line=${line#h*//}
line=${line%%/*}
echo "$line"
done | sort | uniq -c | sort -r | awk '{print $1,$2}'

发表于 2024-07-02 17:00:45 回复(0)
cat nowcoder.txt|awk -F/ '

    {
        nums[$3]++
    }
    END{
        for(i in nums){
            print nums[i],i
        }
    }
'|sort -n -r -k1
发表于 2024-06-30 16:11:45 回复(0)
awk -F '//' '{print $2}' test17.txt | awk -F '/' '{print $1}' | uniq -c
发表于 2024-06-12 09:39:48 回复(0)
cat nowcoder.txt|awk -F '/' '{print $3}'|sort|uniq -c|sort -rn|awk '{print $1,$2}'

发表于 2023-12-07 15:52:10 回复(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)
awk -F/ '{map[$3]++}END{for(j in map) printf("%d %s\n",map[j],j)}' | sort -nk1r
发表于 2023-09-22 16:02:51 回复(0)