一、技术知识介绍
-
前言
一直以为shell脚本中没有字典变量,今天搜索了一下发现高版本的shell中已经有支持字典变量了。
-
声明字典类型:
declare -A dict
这里一定要-A来声明,-a只能用来声明数组类型。
-
字典赋初值
dic=([key1]="value1" [key2]="value2" [key3]="value3")
-
字典动态赋值
dic['key']=value
-
打印指定key的value
echo ${dic['key']}
-
打印所有key值
echo ${!dic[*]}
-
打印所有value
echo ${dic[*]}
-
遍历key值
for key in $(echo ${!dic[*]}) do echo "$key : ${dic[$key]}" done
二、应用实例
- 统计词频 WordCount
#! /bin/sh #输入格式为一行一个单词 #定义字典类型变量 declare -A dict #从标准输入读取 while read word do #若key为word的变量不存在,则为未定义,即第一次遇到此word,则将此word加入字典并设置其value为1。,否则自增value值 if [ ! -n dict[${word}] ];then dict[${word}]=1 else ((dict[${word}]++)) fi done #打印统计结果 echo -e "word\t\tcount" for key in $(echo ${!dict[*]}) do echo -e "$key\t\t${dict[$key]}" done
- 运行结果
可见,统计结果正确。[hadoop@master workspace]$ cat test.txt 123 123 123 1 1 1 2 123 1 2 [hadoop@master workspace]$ cat test.txt | sh sh.sh word count 123 4 1 4 2 2