首页 > 试题广场 >

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

[编程题]打印每一行出现的数字个数
  • 热度指数:24204 时间限制: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)
#!/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)
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 "[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
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 '' '{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 '{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)
#!/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)
#!/bin/bash
awk '
{
    gsub(/[^1-5]/,"",$0)
    print "line"NR" number: " length($0);
    sum+=length($0);
}
END{ print "sum is " sum}
'
exit 0

这里的gsub为字符替换函数,将每段中除了1-5的数字全部替换为空,最后统计长度(即只剩1-5的个数)
发表于 2023-08-13 21:04:34 回复(0)
awk -F "[1-5]" '{ a += NF-1;print "line"NR " number: "NF-1 } END {print "sum is "a}'

发表于 2023-08-05 20:11:19 回复(0)
sed  's/[1-5]/ - /g' nowcoder.txt | sed  's/[a-z,6-9,0]//g' | awk -v sum=0 '{print "line" NR "number:" NF} {sum=sum+NF}END{print "sum is" sum}'
发表于 2023-03-14 16:03:20 回复(0)
#!/bin/bash
i=0
sum=0
while read -r line
do
    ((i+=1));
    number=$(echo $line|grep -Eo '[1-5]'|wc -l)
    echo "line$i number: $number" 
    ((sum+=number));
done
echo "sum is $sum"

发表于 2023-02-08 12:04:59 回复(0)
awk -F '' '{
        str1=""
        for(x=1;x<NF+1;x++){
            if ($x ~ /[1-5]/)             
                {
                    str=$x
                    str1=(str1 str)
                }  
        }
        sm+=length(str1)
        print "line"NR" number: "length(str1)
}
END{
    print "sum is "sm
}' nowcoder.txt

发表于 2023-01-17 17:43:11 回复(0)
我才用笨办法,循环读取,然后使用sed进行关键词换行,最后用grep过滤关键词进行统计
line_num=0      # 行号
while read line
do
        line_num=$((line_num+1))
        word_count=$(echo $line | sed 's/\w/&\n/g' | grep -E -c '[1-5]')
        echo "line${line_num} number: $word_count"
        res=$((res+word_count))
done < nowcoder.txt
echo "sum is ${res}"

发表于 2022-10-16 14:43:36 回复(0)
awk '{cnt=gsub(/[1-5]/,"");sum+=cnt;print "line"NR,"number:",cnt;}END{print "sum is",sum}' nowcoder.txt

发表于 2022-09-19 10:37:36 回复(1)
#利用awk字符串类预定义函数gsub的返回值来保存每行符合条件的字符的个数
awk '{num = gsub(/[1-5]/,""); res += num; print "line"NR" number: "num} END{print "sum is "res}' nowcoder.txt
发表于 2022-08-27 18:01:34 回复(0)
sed -e 's/[a-z]//g' -e 's/[6-9]//g' -e 's/0//g'|awk -F "" '{print "line",NR,"number:",NF;sum+=NF}END{print "sum is "sum}'
发表于 2022-08-17 15:11:15 回复(0)
#!/bin/bash
lineNum=$(cat nowcoder.txt | wc -l)
sum=0
for ((i=1;i<=lineNum;i++))
do
	num=$(sed -n ${i}p nowcoder.txt | grep -o -E "1|2|3|4|5" | wc -l)
	sum=$[$sum + $num]
	echo "line${i} number:$num"
done
echo sum is $sum

发表于 2022-08-08 00:17:53 回复(0)