首页 > 试题广场 >

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

[编程题]打印每一行出现的数字个数
  • 热度指数:24401 时间限制: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
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
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)
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)
awk -F "" 'BEGIN{sum=0;}{
c=0
for(i=1;i<=NF;i++){
if ($i ~ /[1-5]/){
c+=1
}
}
sum+=c
printf("line%s number:%s\n",NR,c)
}END{printf("sum is %s\n",sum)}'
发表于 2022-07-17 16:49:25 回复(0)
sed -n 's/[^1-5]//g p' nowcoder.txt | awk '{sum+=length($0);printf("line%d number:%d\n",FNR,length($0))} END{print "sum is",sum}'
发表于 2022-07-12 16:07:01 回复(1)
#!/bin/bash
i=0
s=0
for word in `cat nowcoder.txt`
do
    num=0
    let i++
    for((k=0;k<${#word};k++))
    do
        c=${word:k:1}
        [ $c -le 5 -a $c -ge 1 ] && let num++
    done
        echo "line$i number:$num"
        let s+=num
done
echo "sum is $s"

发表于 2022-06-25 15:54:42 回复(0)
awk '
{
    split($0,a,"")
    cnt = 0
    n = length(a)
    for (i = 0; i < n; i++) {
        if (a[i] == 1 || a[i] == 2 || a[i] == 3 || a[i] == 4 || a[i] == 5) cnt++
    }
    print("line"NR, "number:", cnt)
    sum += cnt
}
END { print("sum is " sum) }
'

发表于 2022-05-13 18:57:37 回复(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)
#!/usr/bin/env bash
awk '{b=gsub(/[1-5]/,"");cmt+=b;print "line",NR,"number:",b}END{print "sum is ",cmt}' nowcoder.txt 
发表于 2022-03-25 11:17:23 回复(0)
awk -F "[1-5]" 'BEGIN{sum=0} {print "line"NR" number:"(NF-1) ;sum+=(NF-1)}END{print "sum is "sum }' nowcoder.txt
发表于 2022-03-24 10:11:07 回复(0)
awk -F "" '
{
    sum=0;
    for(i=1;i<=NF;i++)
    {
        if($i~/[1-5]/)
        {
            sum+=1;
        }                  
    }
    a[NR]=sum;
}
END{
    row_length=length(a)
    sum=0
    for(i=1;i<=row_length;i++)
    {
        printf("line%s number: %s\n",i,a[i]);
        sum+=a[i]
    }
    printf("sum is %s\n",sum);
}
' nowcoder.txt
发表于 2022-03-15 13:51:49 回复(0)
cat nowcoder.txt |tr -dc [1-5\\n]|awk  -F '' 'BEGIN{a=0}{a+=NF;print "line"NR,"number:"NF}END{print "sum is "a}'
或
cat nowcoder.txt |tr -dc [1-5\\n]|awk 'BEGIN{a=0}{a+=length($1);print "line"NR,"number:"length($1)}END{print "sum is "a}'
tr删掉所有1-5和换行之外的所有字符,每行打印行数和字符串长度,END模块输出汇总求和的a
发表于 2022-03-10 22:00:03 回复(0)
sed 's/[1-5]/@/g'|awk 'BEGIN{FS=""}{a=0;for(i=1;i<=NF;i++){if($i=="@"){a++}};print "line"NR" number:"a;b+=a}END{print "sum is"b}'
发表于 2022-03-01 11:30:57 回复(0)
s=`cat nowcoder.txt|wc -l`
b=0
for ((i=1;i<=$s;i++))
do
a=`cat  nowcoder.txt|head -$i|tail -1|tr -cd [0-9]|wc -c`
echo line$i number:$a
b=$(($a+$b))
done
echo sum is $b
是不是题目给的结果有问题呢?
发表于 2022-01-17 21:25:03 回复(0)

问题信息

难度:
34条回答 1339浏览

热门推荐

通过挑战的用户

查看代码