當前位置:首頁 » 編程軟體 » 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"

熱點內容
c語言負數運算 發布:2025-05-13 18:45:21 瀏覽:427
太空殺電腦版連接不到伺服器 發布:2025-05-13 18:40:19 瀏覽:456
同樣的配置為什麼跑分不同 發布:2025-05-13 18:39:06 瀏覽:278
獲取linuxcpu序列號 發布:2025-05-13 18:36:35 瀏覽:738
appleid為什麼連接伺服器出現問題 發布:2025-05-13 18:17:37 瀏覽:971
書翁怎麼配置 發布:2025-05-13 18:17:36 瀏覽:911
雲資料庫mongodb 發布:2025-05-13 18:16:12 瀏覽:774
A7編程 發布:2025-05-13 18:15:26 瀏覽:742
python視圖 發布:2025-05-13 18:14:01 瀏覽:759
win為什麼干不過安卓 發布:2025-05-13 18:12:27 瀏覽:586