[ SHELL编程 ] 数组、关联数组和awk数组
本文主要对shell编程中常用的数组、关联数组和awk数组定义、操作以及注意事项做个总结,并提供具体案例。
数组
数组定义:一对圆括号表示数组,数组元素之间用空格符号分割。
Array=(val1 val2 val3)
数组操作:包括获取长度,数组元素查询、增加、删除、修改,获取数组下标
#获取数组长度
${#Array[@]} #Arr表示数组名,下同
${#Array[*]} #获取数组元素
${Array[@]} #获取数组全部元素
${Array[*]} #同上
${Array[]} #获取数组指定位置元素,下标从0开始
${Array[*]::} #获取指定范围的数组元素 #增加数组元素
Array[]=oracle #原数组不存在下标为2 #修改数组元素
Array[]=oracle #原数组存在下标为2,注意与增加方式的区别 #删除数组元素
unset Array[] #带下标则为清除指定位置元素
unset Array #不带下标,清除全部数据 #替换操作,不会修改原数组元素
${Array[@]/oracle/root} #获取数组下标
${!Array[@]}
关联数组
数组定义:与普通数组区别就是可以用字符串作为数组下标,定义方式为用declare -A声明变量。
declare -A Array
数组操作:与普通数组相同,重点描述下编程中常用的根据指定的下标获取元素。关联数组默认输出的顺序是无序的。
for key in ${!Array[*]}
do
echo "The value of ${key} is ${Array[$key]}"
done
awk数组
数组定义:默认为关联数组,下标可以是数字或者字符串,且不需要申明,可直接使用。特别一点是awk可以用split生成数组
#通过split函数间接生成数组
awk 'BEGIN{info="I LOVE CHINA";split(info,Array," ");}' #split为awk内置函数,info表示字符串,Array表示生成数组," "表示分隔符 #直接生成数组
awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;}'
数组操作:部分操作与上述不同,下面描述一下
#获取数组长度
awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;print length(Array)}' #调用内置函数length获取
awk 'BEGIN{info="I LOVE CHINA";len=split(info,Array," ");print len}' #split函数返回数组长度
操作实例
1、tcp端口状态统计
$ netstat -an | awk '/^tcp/ {++Arr[$NF]} END {for(a in Arr) print a, Arr[a]}'
LISTEN
ESTABLISHED
SYN_SENT
2、将用户和用户家目录保存到数组,后续可根据用户名获取家目录。可根据具体场景修改如下代码
#!/bin/bash [ -f file.unl ] && rm file.unl
awk -F':' '{print $1,$6}' /etc/passwd | head -n > file.unl #only for test
declare -A Arr
while read col1 col2
do
Arr[${col1}]=${col2}
done < file.unl for user in ${!Arr[@]}
do
printf "The directory of ${user} is ${Arr[${user}]}\n"
done
输出:
The directory of bin is /bin
The directory of daemon is /sbin
The directory of root is /root
[ SHELL编程 ] 数组、关联数组和awk数组的更多相关文章
- 【转】awk数组操作
转自:http://blog.csdn.net/wangran51/article/details/9168361 用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算 ...
- linux awk数组相关操作介绍
用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...
- Linux(8):linux三剑客sed和awk & Shell 编程(1)
linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- shell编程之数组和关联数组
一.数组类似c语言的数组 1.两种赋值方式 可以整体定义数组:ARRAY_NAME=(value0 value1 value2 value3 ...) 此时数组的下标默认是从0开始的 还可以单独定义数 ...
- Linux - 简明Shell编程07 - 数组(Array)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash test0=() # 定义数组 ...
- (一)Linux Shell编程——简介、变量、字符串、数组
1. Shell简介 1.1 Shell出现背景 Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件. 对于图形界面,用户点击某个图标就能启动某个程序:对于命令行,用户输入某个程序的名字( ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- shell编程系列4--有类型变量:字符串、只读类型、整数、数组
shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...
随机推荐
- android 将项目下的数据库拷贝到sd卡中
/** * 将项目下的数据库拷贝到sd卡中 */ public static boolean copyDbToSdCard() { FileInputStream fis = null; FileOu ...
- 0002 - Spring MVC 拦截器源码简析:拦截器加载与执行
1.概述 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求信息的日 ...
- Python的dict与set
一.dict 其他语言中也称为map,使用键-值(key-value)存储 特点: 具有极快的查找速度:可以直接由key计算出value所在的内存地址,而list采用搜索的方式:dict付出的代价是内 ...
- ZooKeeper系列(5):管理分布式环境中的数据
引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...
- js中的substring
"ABCDEFG".substring(2,3) 结果为"C"
- Spring MVC开启注解
1.在spring的配置文件中配置:<context:annotation-config />该项配置只能应用于已经注册的bean,比较难用,不深究. 2.在spring的配置文件中使用c ...
- python基础易错总结
1.python安装配置环境变量 [右键计算机]------->[属性]------->[高级系统设置]------->[高级]------->[环境变量]--------&g ...
- ubuntu14.04 配置g++工具,并运行一个简单的c++文件
首先,对Ubuntu 14.04 LTS进行源更新,摘自下述链接: http://chenrongya.blog.163.com/blog/static/8747419620143185103297/ ...
- ios自动监测更新
http://blog.csdn.net/davidsph/article/details/8931718
- Java序列化对象-字符串转换
package com.test; import com.alibaba.fastjson.JSON; import org.junit.Test; import java.io.ByteArrayI ...