shell中数组的基本用法


数组初始化
假设数组名为ARR,则初始化的一种方法是:

ARR=(2 4 6 8)

其中,括号里的各项使用空格来分隔。

初始化数组的另一种方法是,用其他命令输出的结果来填充到数组中,例如把 ls 命令输出的文件列表填充到数组中:

ARR=(`ls /opt/`)
for FILE in ${ARR[@]};
do
    echo $FILE;
done

 遍历数组方法为:

for NUM in ${ARR[*]}

do
    echo $NUM

done

文章来源:http://www.codelast.com/
其中,每一次循环过程中,数组里的当前元素均被保存到NUM变量中,使用即可。
如果要定义一个空的数组,直接unset即可:

unset ARR

 向数组中添加成员

ARR[1]="item_1"
ARR[2]="item_2"

上面的方法使用了指定数组索引的方式来向数组添加多个成员,但如果不想显式指定数组索引,则可以用下面的方法来添加:

ARR+=("item_1")
ARR+=("item_2")

 取出数组中的一个成员

[root@localhost ~]# echo ${ARR[2]}
item_2

 判断一个指定的字符串是否在该数组中:

if echo "${ARR[@]}" | grep -w "item_1" &>/dev/null; then
    echo "Found"

fi

其中,ARR是你的数组名,item_1是你要查找的字符串。

 统计一个文件中某一列出现的频次
这算是数组的一个应用。
假设有文件 1.txt:

[codelast@ ~]$ cat 1.txt 
a
a
b
c
a
d
e
e
f
a
a

现在要统计出 a,b,c,...等分别出现了多少次,可以这样做:

cat 1.txt | awk '{print $1"\t"1}' | awk '{arr[$1]++}END{for (a in arr) print a, arr[a]}'

解释:
● awk '{print $1"\t"1}' 是给原来只有一列的文件加上一列固定的数字 1,表示每一行的字母出现了1次。
● arr[$1]++ 是累加以第1列为key的数组的value,例如 arr["a"]++ 会使得 arr 这个数组中,key为 a 的那个元素的value加1。
● END{} 块在处理完文件之后才会被执行。
● for (a in arr) print a, arr[a] 遍历数组 arr 中的每一个元素,打印出其 key,以及 key 对应的value。
执行结果:

a 5
b 1
c 1
d 1
e 2
f 1

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

发表评论