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.生成隨機...