1. 程式人生 > 其它 >【Shell案例】【awk和迴圈、NR、格式列印、全域性變數、$0、萬用字元】12、列印每一行出現的數字個數

【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