每日一題--2
阿新 • • 發佈:2018-10-08
重復 重復出現的字符 兼容 函數 aaa -bash 出現的次數 指定 數據 題目2 統計字符串
使用awk統計出來指定字符串中重復出現的字符並重復出現了幾次,現在只考慮有數字和字母,先區分大小寫
eg:
aaabbc------> a 重復出現3次,b重復出現了2次
abababdcac--> a 重復出現了4次,b重復出現了3次,c重復出現了2次
第一個裏程碑:
先不考慮樣式和要求,先輸出所有字符串出現的次數
//我們先使用awk把單個字符串取出來 [root@web01-7 /]# echo "aaabbc" | awk -F "" ‘{$1=$1;print $0}‘ a a a b b c //$1=$1我們可以發現他其實裏面的原始值沒有變,但是我們這樣寫就是為了讓awk的數據重構 [root@web01-7 /]# echo "aaabb" | awk -F "" ‘{for(i=1;i<=NF;i++){sum[$i]++}}END{for(j in sum)print sum[j],j}‘ 3 a 2 b 1 c //使用awk數據求和來取出每個字母出現的次數,並輸出
第二個裏程碑:
把重復出現2次以上的給打印出來,只出現1次的不打印
[root@web01-7 /]# echo "aaabbc" | awk -F "" ‘{for(i=1;i<=NF;i++){sum[$i]++}}END{for(j in sum)if(sum[j]>=2)print sum[j],j}‘
3 a
2 b
第三個裏程碑
按照題目要求的格式化輸出
echo "aaabbc" | awk -F "" ‘{for(i=1;i<=NF;i++) {sum[$i]++}} END{{ for (j in sum) if ( sum[j]>=2 ) printf"%s重復出現%s次\t",j, sum[j]} printf"\n"}‘
進階版:不區分大小統計(應該能簡化??)
[root@web01-7 /]# echo "AAaaabbc" | awk ‘{print tolower($0)}‘ | awk -F "" ‘{for(i=1;i<=NF;i++) {sum[$i]++}} END{{ for(j in sum) if ( sum[j]>=2 ) printf"%s 重復出現%次 \",j, sum[j]} printf"\n"}‘
a重復出現5次 b重復出現2次
總結
1,awk可以使用-F "" 這種方式來分割單個字符
2,awk中可以使用函數tolower()把所有大寫的字母替換成小寫的3,awk中可以使用函數toupper()把所有小寫的字母替換成大寫的
4,也可以使用BEGIN{IGNORECASE=1}來屏蔽awk匹配的時候區分大小寫,要記得這個在awk的兼容模式下不能用
每日一題--2