首页 > 试题广场 >

打印每一行出现的数字个数

[编程题]打印每一行出现的数字个数
  • 热度指数:28078 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
写一个bash脚本,统计一个文本文件nowcoder.txt中每一行出现的1~5数字的个数,并且计算一下整个文档中一共出现了几个1~5数字的总数。

示例:
假设 nowcoder.txt 内容如下:
a12b8
10ccc
2521abc
9asf
你的脚本应当输出:
line1 number: 2
line2 number: 1
line3 number: 4
line4 number: 0
sum is 7

说明:
不要担心你输出的空格以及换行的问题
示例1

输入

a12b8
10ccc
2521abc
9asf

输出

line1 number: 2
line2 number: 1
line3 number: 4
line4 number: 0
sum is 7
coutline=0
count=0
sum=0
while read line
do
    for((i=0;i<${#line};i++));do
        if [[ ${line:$i:1} =~ [1-5] ]];then
            let count=count+1
        fi
    done
    let coutline=coutline+1
    echo "line${coutline} number: ${count}"
    let sum=sum+count
    count=0
done<./nowcoder.txt
echo "sum is ${sum}"
发表于 2021-05-08 13:44:09 回复(1)
cnt=1
sum=0
while read line
do
    r=`echo $line | grep -oE "[12345]" | wc -l`
    echo "line${cnt} number: ${r}"
    let "cnt++"
    let "sum+=$r"
done 
echo "sum is ${sum}" < nowcoder.txt 


awk '{
    gsub(/[^1-5]/,"",$0);
    print "line"NR" number: "length($0);
    sum+=length($0);
} END{ print "sum is "sum }'


编辑于 2021-01-12 19:46:43 回复(1)
# 利用 awk 的 gsub 返回替换的数量
awk '{
    num = gsub(/[1-5]/, "");
    sum += num;
    printf("line%d number: %d\n", NR, num);
}
END {
    printf("sum is %d\n", sum);
}'

发表于 2021-05-12 11:45:17 回复(0)
idx=1
sum=0

while read line
do
    num=$(echo $line |grep -o [1-5]|wc -l) 
    echo "line$idx number:" $num
    let idx=$idx+1  # 这行等同于 $idx++
    let sum=$sum+$num
done
echo "sum is"$sum

### 对上面的命令解读:
## grep -o 的用法匹配满足条件的字符,举例如下,你一看就懂
# echo a123kk |grep -o [1-9]
1
2
3
# echo a123kk |grep -o [a-z]
a
k
k
# echo a123kk |grep -o a1   
a1
## let 是shell命令运算符,用于整数运算,举例如下
# let a=1+3;echo $a
4
发表于 2022-07-17 22:37:01 回复(0)
awk -F '' '{count=0;{for(i=1;i<=NF;i++)if($i~/[1-5]/)count++;sum+=count}print "line"NR,"number:",count}END{print "sum is ",sum}'
发表于 2022-04-20 22:40:14 回复(0)
awk -F "[1,2,3,4,5]" 'BEGIN{sum=0}{print "line"NR" number:"(NF-1);sum+=(NF-1)}END{print "sum is "sum}' nowcoder.txt

发表于 2021-09-26 16:20:56 回复(5)
#!/bin/bash

idx=1
sum=0

for line in $(cat nowcoder.txt)
do
        num=$(echo $line | grep -o [1-5] | wc -l)
        echo line$idx number:$num
        let "sum+=num"
        let "idx++"
done
echo sum is $sum

发表于 2021-09-09 12:34:17 回复(0)
#!/bin/bash
sum=0
i=1
while read line;do
     #echo $line
     a=$(echo "$line" | grep -o -E "[1-5]"| wc -l)
     echo line${i} number:$a
     i=$[i+1]
     sum=$[$a+$sum]
done < nowcoder.txt
     echo "sum is $sum"
发表于 2021-03-03 22:41:45 回复(0)
awk -F '' '{
    cnt[NR]=0			#注意cnt[NR]初始化为0;否则不会记录没有1~5数字的行
    for(i=1;i<=NF;i++){
        if($i~/[1-5]/){		#注意这里需要加上//表示正则
            sum++
            cnt[NR]++		#注意这里使用了行号NR
        }
    }
}END{
    for(j in cnt){
        printf("line%d number: %d\n",j,cnt[j])	#可以使用print来打印更方便简洁
    }
    printf("sum is %d",sum)
}' nowcoder.txt

发表于 2024-10-26 21:18:48 回复(0)
awk '{gsub("[^1-5]", ""); print "line" NR " number: " length; sum+=length} END {print "sum is " sum}' nowcoder.txt

# gsub("[^1-5]", ""); 剔除每一行非1-5的字符
# print "line" NR " number: " length;  输出打印  此时  [每一行长度==每一行1-5的字符数]
# sum+=length  做一个变量累加每一行  1-5 的字符数量
# END {print "sum is " sum} 最后一行打印总数
发表于 2024-03-25 01:04:59 回复(0)
awk '{count=0; for(j=1;j<=NF;j++){for(i=1;i<=length($j);i++){char=substr($j,i,1); if(char ~ /^[1-5]$/){count++}}}printf("line%d number:%d\n",NR,count);total+=count} END{printf("sum is %d",total)}' $1
发表于 2025-01-17 11:34:06 回复(0)
sum=0
i=0
while read line; do
    let i+=1
    cnt=$(echo $line | sed 's/[1-5]/\n/g' | wc -l)
    let cnt-=1
    let sum+=$cnt
    echo line$i number: $cnt
done
echo sum is $sum
发表于 2024-12-07 16:34:57 回复(0)
#!/bin/bash
line_num=0
sum=0
line_number=1
while IFS= read -r line;do
    line_count=0
    for (( i=0; i<${#line}; i++ )); do
        char="${line:$i:1}"
        if [[ $char =~ [1-5] ]]; then
            ((line_count++))
        fi
    done
    echo "line${line_number} number: ${line_count}"
    sum=$((sum + line_count))
    ((line_number++))
done <nowcoder.txt
echo "sum is ${sum}"
发表于 2024-12-05 15:35:33 回复(0)
gawk 'BEGIN {
           sum = 0
         }
         {
           count_line = 0
           for( i=1; i<=length($0); i++ ) { # 遍历每行的每个字符
            char = substr($0, i, 1) # 逐个截取字符
            if( char ~ /[1-5]/ ){
              count_line++
            }
          }
            print "line" NR " number: " count_line
            sum += count_line
        }
        END {
          print "sum is " sum
        }' "$1"
发表于 2024-08-29 14:01:09 回复(0)
file="nowcoder.txt"

cat $file | sed 's/[^1-5]//g' | awk -v sum=0 '{
     sum=sum + length($1)
    print "line"NR " number:"length($1)
    }
    END{
        print "sum is "sum
    }'
发表于 2024-07-03 14:47:08 回复(0)
#!/bin/bash

line_number=0

while IFS= read -r line; do
    ((line_number++))
    count=$(echo "$line" | tr -dc "1-5" | wc -m)
    ((sum += count))
    echo "line${line_number} number: ${count}"
done

echo "sum is ${sum:-0}"

发表于 2024-07-02 15:38:47 回复(0)
cat nowcoder.txt |awk '
    {
        sum=0
        for(i=1;i<=NF;i++){
            for(j=1;j<=length($i);j++){
                if(substr($i,j,1)>=1&&substr($i,j,1)<=5){
                    sum++
                }
            }
        }
        print "line"NR " number:"sum
        sums+=sum
    }
    END{
        print "sum is "sums
    }
'
发表于 2024-06-30 15:11:59 回复(0)
sed -n 's/[^1-5]//gp' nuber.txt | awk '{sum += length($1);print "line"NR" number:"length($1)} END{print"sum is "sum }'
发表于 2024-06-03 14:29:01 回复(0)
a=0;n=$(cat nowcoder.txt | wc -l); for i in $(seq 1 $n); do line=$(sed -n ${i}p nowcoder.txt); num=$(echo $line | grep -oE [1-5]+ | tr -d "\n" | wc -L); echo "line$i number: $num"; a=$((a+num)); done; echo "sum is $a"
发表于 2024-05-10 14:39:11 回复(0)
#!/bin/bash
col_num=`cat nowcoder.txt| wc -l`
sum=0
for i in `seq 1 $col_num`;do    
    n=`cat nowcoder.txt|head -n${i}|tail -n1|grep -o '[1-5]'|wc -l`
    sum=$((sum+n))
    printf "line%d number: %d\n" $i $n
done
printf "sum is %d" $sum
编辑于 2024-02-16 19:35:14 回复(0)