A. shell腳本統計某一行指定字元個數
假如是ifconfig輸出,利用管道
ifconfig | grep HWaddr | grep : -o | wc -l
先找到 HWaddr 所在的行
然後找到:
然後wc統計下個數
B. 怎麼用shell腳本語言編寫一個統計當前目錄下的文件數目的...
統計當前目錄下總共多少文件和文件夾,命令 : find . |wc -l 得出來的數字-1就是了
如果只是統計當前目錄下的文件,不統計子文件夾下的文件,那命令是 ls -l |wc -l
得出來的數字-1
C. 用shell寫一個腳本,用來統計日誌總行數
單個文件統計:
$ zcat OF25_2016-10-26-211731.log.zip | wc -l
一天的所有文件統計:
$ zcat OF25_2016-10-26-*.log.zip | wc -l
使用參數的shell
#/bin/sh
zcat $1_$2-*.log.zip | wc -l
D. 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
E. 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腳本不適合做類似統計這樣的事情嗎?
F. 如何在Shell腳本中計算字元串長度
${#變數名}
將字元串保存在變數中,在變數名前加#號,放入花括弧中,前面加上取變數值符號$,可以返回字元串長度
G. 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相關知識
H. 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處理】
I. 文本統計工具的設計(使用shell腳本編寫程序,實現對文本文件的統計功能。要求使用linux shell編寫程序腳本
read a
J. shell命令怎麼統計代碼行數
wc命令的功能為統計指定文件中的位元組數、字數、行數, 並將統計結果顯示輸出。 語法:wc [選項] 文件… 說明:該命令統計給定文件中的位元組數、字數、行數。如果沒有給出文件名,則從標准輸入讀取。wc同時也給出所有指定文件的總統計數。字是由空格字元區分開的最大字元串。 該命令各選項含義如下: - c 統計位元組數。 - l 統計行數。 - w 統計字數。 這些選項可以組合使用。 輸出列的順序和數目不受選項的順序和數目的影響。 總是按下述順序顯示並且每項最多一列。 行數、字數、位元組數、文件名 如果命令行中沒有文件名,則輸出中不出現文件名。例如: $ wc - lcw file一 file二 四 三三 file一 漆 5二 file二 省略任選項-lcw,wc命令的執行結果與上面一樣