当前位置:首页 » 编程软件 » shell脚本统计

shell脚本统计

发布时间: 2022-11-19 05:41:03

⑴ shell脚本的单词统计问题

#/bin/bash

if[-f"a.txt"];then
grep-E-o"[[:alpha:]]+"a.txt|awk'{count[$0]++};END{for(wordincount){printword,count[word]}}'|sort-k2>count.txt
else
echo"thisisnofilea.txt,pleasecheck"
exit-1
fi

⑵ shell脚本统计某一行指定字符个数

假如是ifconfig输出,利用管道
ifconfig | grep HWaddr | grep : -o | wc -l
先找到 HWaddr 所在的行
然后找到:
然后wc统计下个数

⑶ shell脚本大全

一、实现Ping一个网段的所有IP,并检测网络连接状态是否正常

1、案例1

2、案列2

二、判断网络是否流畅

三、根据文件中的用户名信息创建用户

四、点名器

五、对100以内的整数相加

六、统计一定时间内所有访问 apache 服务器的请求有多少个

七、统计一定时间内所有访问本机 Aapche 服务器的远程 IP 地址是什么

八、统计每个远程IP访问了本机apache的次数

九、统计当前linux系统中可以登录计算机的账户有多少个

十、统计某个文件下有多少个文件并显示这些文件名

⑷ linux shell脚本中如何统计某一行中某字符出现的个数

1、统计某个字符的个数,以a为例
grep -o a urifle
awk -F "" '{for(i=1;i<=NF;++i) if($i=="a") ++sum}END{print sum}' urfile
#-F ""中间必须要有空格 "a"必须使用双引号,字符串
awk -F "" '{for(i=1;i<=NF;i++)a[$i]++}END{for(j in a) if(j=="c") print a[j]}' urfile
#
2、储存在变量里
echo "0001111" |tr -cd 1 |wc -c
如果有时间可以看看《Linux就该这么学》,里面有各种Linux相关知识

⑸ 如何用shell脚本统计出当前目录下子目录,还有所有可读,可写,可执行的文件的个数

#!/bin/bash

fcnt=0
dcnt=0
frcnt=0
fwcnt=0
fxcnt=0
forfilein*
do
if[-f$file];then
letfcnt+=1
if[-r$file];then
letfrcnt+=1
fi
if[-w$file];then
letfwcnt+=1
fi
if[-x$file];then
letfxcnt+=1
fi
elif[-d$file];then
letdcnt+=1
fi
done
echo"Thereare$fcntfilesin$PWD"
echo-e" Thereare$frcntreadablefilesin$PWD"
echo-e" Thereare$fwcntwriteablefilesin$PWD"
echo-e" Thereare$fxcntexecuteablefilesin$PWD"
echo"Thereare$dcntdirectoriesin$PWD"

⑹ Shell脚本-awk统计单词数

统计passwd文件每个单词出现的次数,这里以前5行为例

[root@web01 ~]# head -5 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

【思路】

【直接用awk数组的2次for循环】

[root@web01 ~]# head -5 /etc/passwd | awk -F "[:/]" '{for (i=1;i<=NF;i++) S[$i]++}END{for (key in S) print key,S[key]}'

4 2

10

7 1

nologin 4

bin 4

x 5

adm 3

sbin 5

bash 1

spool 1

var 2

0 2

1 2

lpd 1

2 2

daemon 2

root 3

lp 2

3 1

【先把数据处理成一列  -tr】

[root@web01 ~]# head -5 /etc/passwd|tr "[:/]" "\n"|sed '/^$/d'

【用awk的内置变量RS做成一列】

[root@web01 ~]# head -5 /etc/passwd|awk -vRS="[:/\n]+" '{print $0}'

【接下来就可以用awk单次for循环,也可以用sort+uniq处理】

⑺ shell脚本实现统计目录下(包括子目录)所有文件的个数

在shell终端中输入下列命令:

#在当前目录生成脚本文件countfile
cat>countfile<<SCRIPT
#!/bin/sh
find"$@"-typef|
wc-l
SCRIPT
#为脚本添加权限
chmod+xcountfile
#执行用例
./countfile~

⑻ Shell脚本实现MapRece统计单词数程序

options:
(1)-input:输入文件路径
(2)-output:输出文件路径
(3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本
(4)-recer:用户自己写的recer程序,可以是可执行文件或者脚本
(5)-file:打包文件到提交的作业中,可以是mapper或者recer要用的输入文件,如配置文件,字典等。
(6)-partitioner:用户自定义的partitioner程序
(7)-combiner:用户自定义的combiner程序(必须用java实现)
(8)-D:作业的一些属性(以前用的是-jonconf),具体有:
1)mapred.map.tasks:map task数目
2)mapred.rece.tasks:rece task数目
3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数
据的分隔符,默认均为\t。
4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
5)stream.rece.input.field.separator/stream.rece.output.field.separator:rece task输入/输出数据的分隔符,默认均为\t。
6)stream.num.rece.output.key.fields:指定rece task输出记录中key所占的域数目
另外,Hadoop本身还自带一些好用的Mapper和Recer:
(1) Hadoop聚集功能
Aggregate提供一个特殊的recer类和一个特殊的combiner类,并且有一系列的“聚合器”(例如“sum”,“max”,“min”等)用于聚合一组value的序列。用户可以使用Aggregate定义一个mapper插件类,这个类用于为mapper输入的每个key/value对产生“可聚合项”。Combiner/recer利用适当的聚合器聚合这些可聚合项。要使用Aggregate,只需指定“-recer aggregate”。
(2)字段的选取(类似于Unix中的‘cut’)
Hadoop的工具类org.apache.hadoop.mapred.lib.FieldSelectionMapRec帮助用户高效处理文本数据,就像unix中的“cut”工具。工具类中的map函数把输入的key/value对看作字段的列表。 用户可以指定字段的分隔符(默认是tab),可以选择字段列表中任意一段(由列表中一个或多个字段组成)作为map输出的key或者value。 同样,工具类中的rece函数也把输入的key/value对看作字段的列表,用户可以选取任意一段作为rece输出的key或value。

后来将slaves节点的hostname也修正为IP映射表内对应的名字,解决?

根据一位外国友人的说明,在rece阶段 ,0-33%阶段是 shuffle 阶段,就是根据键值 来讲本条记录发送到指定的rece,这个阶段应该是在map还没有完全完成的时候就已经开始了,因为我们会看到map在执行到一个百分比后rece也启动了,这样做也提高了程序的执行效率。
34%-65%阶段是sort阶段,就是rece根据收到的键值进行排序。map阶段也会发生排序,map的输出结果是以键值为顺序排序后输出,可以通过只有map阶段处理的输出来验证(以前自己验证过,貌似确有这么回事,大家自己再验证下,免得我误人子弟啊)。
66%-100%阶段是处理阶段,这个阶段才是真正的处理阶段,如果程序卡在这里,估计就是你的rece程序有问题了。
索性等了一晚上,第二天终于有动静了

和上面的记录对比发现,从%67到%77用了11个小时!这明显是rece程序效率太慢了。也可能是数据倾斜问题。中间也试过增加recer的数量,但无果。最终我索性减少了输入文件的行数,使其只有三行:

然后重新运行程序,瞬间得到了结果:

可见,结果是正确的。

令人诧异的是很快就执行完了,难道真的是shell脚本不适合做类似统计这样的事情吗?

⑼ 大佬们怎么用shell脚本,统计当前用户最常用的指令及其对应的历史使用次数,而且输出前5个啊

history | awk '{print $2}' | sort -rn |uniq -c|sort -rn |head -5

⑽ 怎样编写shell脚本实现统计一个小组的成绩情况,统计信息包括:总分,平均分,最高分

#!/bin/bash

# 2013/07/01 sun

#功能说明:实现统计录入学生成绩的总人数,得出最高分,最低分,平均分,方差,标准方差,还有各个分数段的所占百分比

echo "请输入所有学生的成绩,以空格隔开:"

read -a score_arr

#定义一个数组来存放用户输入的成绩

sorted_arr=($(printf '%s\n' "${score_arr[@]}"|sort -n -r))

#录入学生成绩,并且是成绩之间使用空格隔开

declare -i i b=0 c=0 d=0 e=0 f=0

#定义变量i来循环数组,依次读出数组里面的数据,定义五个初值为0的变量来存放每个分数段的人数

for (( i=0; $i<${#sorted_arr[@]}; i=$i+1 ))

#进行for循环,依次取出数组里面的数据

do

#对每个取出来的数据进行判断

case ${sorted_arr[i]} in

?|?\.*|[1-5]?|[1-5]?\.*)

#如果取出数组里面的数据在60分以下

b=$(($b+1));;

#变量b自加1,进行统计数据

6?|6?\.*)

#如果取出数组里面的数据在60分--69分之间

c=$(($c+1));;

#变量c自加1,进行统计数据

7?|7?\.*)

#如果取出数组里面的数据在70分--79分之间

d=$(($d+1));;

#变量d自加1,进行统计数据

8?|8?\.*)

#如果取出数组里面的数据在80分--89分之间

e=$(($e+1));;

#变量e自加1,进行统计数据

100|100\.0|9?|9?\.*)

#如果取出数组里面的数据在90分--100分之间

f=$(($f+1));;

#变量f自加1,进行统计数据

*)

score_rank[i]="Not a Score";;

esac

done

#判断结束

count=$(($b+$c+$d+$e+$f))

#算出总人数

declare -i j max min ave countall=0 u ua=0 ual=0 uall=0 fang

#定义变量j,最大值max,最小值min,平均数ave,所有人的分数之和countall

max=${sorted_arr[0]}

#获取排序后的数组的第一个数,也就是最大数

j=$((${#sorted_arr[@]}-1))

#得到排序后的数组的最后的一个分数的下标

min=${sorted_arr[j]}

#获取排序后的数组的最后一个数,也就是最小数

for (( j=0; $j<${#sorted_arr[@]}; j=$j+1 ))

#进行for循环,让学生成绩相加,算出学生成绩的总分

do

countall=$countall+${sorted_arr[j]}

done

ave=$countall/$count

#算出平均成绩

for (( j=0; $j<${#sorted_arr[@]}; j=$j+1 ))

#进行for循环,让学生成绩相加,算出学生成绩的总分

do

ua=$(awk -v va=${sorted_arr[j]} -v vb=$ave 'BEGIN{printf "%2d" ,va-vb}')

#让每一个数都减去平均数然后赋值于ua

ual=$(awk -v va=$ua -v vb=$ua 'BEGIN{printf "%2d" ,va*vb}')

#算得ua的平方

uall=$(awk -v va=$uall -v vb=$ual 'BEGIN{printf "%2d" ,va+vb}')

#算出它们的总合,也就是方差

done

u=$(awk -v va=$uall -v vb=$count 'BEGIN{printf "%2d" ,va/vb}')

#算出学生成绩的平均分,并赋值于ave

#下面是计算每个分数段的百分数

countb=$(awk -v va=$b -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')

#echo $countb

countc=$(awk -v va=$c -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')

#echo $countc

countd=$(awk -v va=$d -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')

#echo $countd

counte=$(awk -v va=$e -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')

#echo $counte

countf=$(awk -v va=$f -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')

#echo $countf

#输出结果

echo "总人数 最高分 最低分 平均分 方差 "

echo "$count $max $min $ave $u "

echo "标准方差="

echo "scale=5;sqrt($u)" | bc

#算出标准方差

echo " 60分以下 60--69 70--79 80--89 90--100"

echo "人数" " $b $c $d $e $f"

echo "比例" "$countb $countc $countd $counte $countf"

热点内容
给字符加密 发布:2025-05-13 22:12:32 浏览:971
数据库系统实现答案 发布:2025-05-13 22:11:57 浏览:140
哪个软件可以共存安卓 发布:2025-05-13 22:10:15 浏览:552
上传宦妃天下野泉肉肉 发布:2025-05-13 22:10:10 浏览:408
洗眼睛解压 发布:2025-05-13 21:58:28 浏览:272
c存储指针 发布:2025-05-13 21:49:04 浏览:921
结绳编程软件 发布:2025-05-13 21:49:03 浏览:850
解压体育馆 发布:2025-05-13 21:27:48 浏览:263
哪家编程课 发布:2025-05-13 21:27:04 浏览:895
为什么文件要压缩 发布:2025-05-13 21:16:07 浏览:50