Shell 程式設計 利用字典統計文字次數

2021-09-23 14:11:12 字數 1821 閱讀 4512

csdn 問答上看到的乙個問題,有乙個 test.log ,內容如下:

a,e

a,b,e

b,c,e

c,ec,

d,ed,e

統計規則是這樣的:每一行以逗號分割,如果第二個欄位為 e 就統計該行,否則將第乙個字段相同且第二個欄位不為 e 的行數累加。

為了換換腦子、調節一下大腦思維,所以就花了點時間寫了下這個指令碼,整理過程如下。

利用 shell 指令碼進行統計,可以考慮字典這個資料型別,迴圈遍歷檔案內容,對每一行進行如下的處理:

編寫 shell 指令碼如下:

input_file=/home/test.log

declare -a dic

echo 'start sumup'

while read -r line

do firstcol=`echo $ | awk -f ',' ''`

secondcol=`echo $ | awk -f ',' ''`

storedvalue=$

if [ "$" = 'e' ] && [ -z $storedvalue ]; then

echo $firstcol" not exist and second field is e" set 0

dic[$firstcol]=0

elif [ "$" != 'e' ] && [ -z $storedvalue ]; then

echo $firstcol" not exist and second field is not e,set 1"

dic[$firstcol]=1

elif [ "$" = 'e' ] && [ -n $storedvalue ];then

echo $firstcol" exist and second field is e ,do nothing"

else

echo $firstcol" sumup 1"

let dic[$firstcol]+=1

fidone < $

echo 'print the dictionary content'

for key in $(echo $)

do value=$

if [ $value = 0 ] ; then

echo $key null

else

echo "$key : $"

fidone

執行結果:

start sumup

a not exist and second field is e set 0

a sumup 1

b not exist and second field is e set 0

b sumup 1

c not exist and second field is e set 0

c exist and second field is e ,do nothing

c sumup 1

d not exist and second field is e set 0

d exist and second field is e ,do nothing

print the dictionary content

a : 1

b : 1

c : 1

d null

1、shell 字典的用法;

2、shell 多條件分支的用法, elif 是關鍵字而非 else if ;

3、數值型別的計算,需要用 let 進行累加,否則就原樣輸出了。

Python 利用字典合併檔案

這個要求是這樣的 將倆個檔案合併為乙個檔案,這倆檔案具有相同的第一列,合併後的檔案為 第一列只有一列 其他列追加,與下圖cc.txt 相同aa.txt1 44 2 65 3 64 4 43bb.txt1 54 2 66 3 68 4 49 importsys printsys.path 0 with...

VBA 利用字典代替VLOOKUP

sub 代替vlookup 方法一 dim d,ar,br,cr,wb as workbook set d createobject scripting.dictionary br worksheets sheet1 a1 currentregion 需要配置的資料表 ar worksheets r...

用字典統計隨機數出現次數

coding utf 8 author wj date 2018 7 10 10 35 import random 隨機產生100個整數 0 100 放入乙個列表中,統計出現次數最多的數字。1.存放隨機數列表 num list 2.迴圈100次 for x in range 0,100 3.生成隨機...