【Shell案例】【awk和循环、NR、格式打印、全局变量、$0、通配符】12、打印每一行出现的数字个数
写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数。
示例:
假设 nowcoder.txt 内容如下:
a12b8
10ccc
2521abc
9asf
你的脚本应当输出:
line1 number: 2
line2 number: 1
line3 number: 4
line4 number: 0
sum is 7
说明:
不要担心你输出的空格以及换行的问题
思路:awk+循环每一行【怎么找每一行的数字???个数】
方法1:awk
【awk内不允许出现shell语句】
【不声明的变量即为全局变量】
awk '{ count=0; len=length($0); for(i=1;i<=len;i++){ s=substr($0,i,1); if(s>0 && s<6){ sum++; count++; } }; printf("line%d number: %d\n",NR,count); }END{ printf("sum is %d\n",sum); } ' nowcoder.txt # res=`echo $i|grep -o -E "[12345]"|wc -l`;只能用在循环中,不能用在awk语句中 # -o -E:只显示匹配部分的正则表达式 # $0表示原有的数据 # NR表示当前行的数据 # printf表示按格式打印
方法2:循环+shell语句
【通配符】
i=1 while read line do res=`echo $line|grep -o -E "[12345]"|wc -l` let sum+=res echo line$i number:$res let i+=1 done < "nowcoder.txt" echo sum is $sum
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/16230463.html
分类:
环境
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix