面试题答案
一键面试关联数组相较于普通数组的不同
- 索引类型:
- 普通数组:普通数组使用整数作为索引,索引从0开始,按顺序递增。例如:
array=(element1 element2 element3)
,可以通过${array[0]}
,${array[1]}
等方式访问元素。 - 关联数组:关联数组使用字符串作为索引,也称为键(key)。这使得数组的索引更加灵活,可以使用有意义的字符串作为索引,而不局限于数字。例如:
declare -A assoc_array
,然后可以通过assoc_array[key1]=value1
来赋值。
- 普通数组:普通数组使用整数作为索引,索引从0开始,按顺序递增。例如:
- 声明方式:
- 普通数组:无需特殊声明,直接通过赋值方式创建,如
array=(value1 value2)
。 - 关联数组:需要使用
declare -A
声明。例如:declare -A assoc_array
。
- 普通数组:无需特殊声明,直接通过赋值方式创建,如
- 访问元素:
- 普通数组:通过整数索引访问,如
${array[1]}
。 - 关联数组:通过字符串键访问,如
${assoc_array[key1]}
。
- 普通数组:通过整数索引访问,如
统计文本文件中单词出现次数并按次数从高到低输出的Bash脚本
#!/bin/bash
# 声明关联数组
declare -A word_count
# 读取文件内容并统计单词出现次数
while read -r line; do
for word in $line; do
# 去除单词两端的标点符号等非字母数字字符
word=$(echo $word | tr -cd '[:alnum:]\n')
if [ -z "$word" ]; then
continue
fi
if [ -v word_count[$word] ]; then
word_count[$word]=$((word_count[$word]+1))
else
word_count[$word]=1
fi
done
done < input.txt
# 按出现次数从高到低排序并输出
for word in $(echo ${!word_count[@]} | tr ' ' '\n' | sort -rn -k1 -t$'\t' -s -u | while read -r w; do echo -e "${word_count[$w]}\t$w"; done | sort -rn -k1 -t$'\t' | cut -f2); do
echo "$word: ${word_count[$word]}"
done
在上述脚本中:
- 首先声明了一个关联数组
word_count
用于统计单词出现的次数。 - 通过
while read -r line
逐行读取文本文件input.txt
的内容。 - 对每行中的每个单词进行处理,去除非字母数字字符,然后统计单词出现的次数。
- 最后,通过一系列
sort
命令对关联数组按出现次数从高到低排序并输出单词及其出现次数。