【Shell案例】【awk和迴圈、NR、格式列印、全域性變數、$0、萬用字元】12、列印每一行出現的數字個數
阿新 • • 發佈:2022-05-06
寫一個 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