写一个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
说明:
不要担心你输出的空格以及换行的问题
a12b8 10ccc 2521abc 9asf
line1 number: 2 line2 number: 1 line3 number: 4 line4 number: 0 sum is 7
#!/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"
#!/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
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) } '
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