Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49414
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 15:48
文章分类

全部博文(15)

文章存档

2018年(15)

我的朋友

分类: LINUX

2018-05-14 09:02:17

#数组

数组:存储多个元素的连续的内存空间,相当于多个变量的集合

数组名和索引
索引:编号从0开始,属于数值索引

注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持;bash的数组支持稀疏格式(索引不连续)

数组声明
普通数组:只能使用整数作为数组索引, declare -a
关联数组:可以使用字符串作为数组索引, declare -A [关联必须先声明后使用]

#数组元素赋值

1.单个赋值
title[0]="a"
title[1]="b"
title[2]="c"
title[4]="d"

2.批量赋值
title=("a" "b" "c" "d")

filename=(/path/*)
filename=(f{1,2,3}.{txt,log})

name=([0]=tom [2]=lit)

read -a little #交互式赋值
a
b
c

declare -A title #关联必须先声明后使用
title["a"]=abc
title["z"]=xyz

#查看数组元素
echo ${title[0]}; echo ${title}; echo $title #显示下标为0元素的值
echo ${title[@]} / echo ${title[*]} #查看数组所有元素
echo ${#title[@]} / echo ${#title[*]} #查看数组元素个数

title[${#title[@]}]=n #数组最后添加个元素

#关联数组
declare -A disk
df -h |grep  "^/dev/sd" |while read line                                                                                   
do
  part=`echo $line |cut -d " " -f1`
  used=`echo $line |sed -nr 's/.*([0-9]+)%.*/\1/p'`
  disk[$part]=$used
  
  echo ${disk[@]}
done

#统计多个文件行数
cat f1.txt f2.txt f3.txt |wc -l

#转置矩阵
awk '{for(i=1;i<=NF;i++){a[FNR,i]=$i}}END{for(i=1;i<=NF;i++){for(j=1;j<=FNR;j++){printf a[j,i]" "}print ""}}' matrix.txt

cat ./matrix.txt
1 2 3
4 5 6
7 8 9 

#数组元数的切片
str=`echo {a..z} |tr -d " "`
echo ${str:3} #跳过前3个之后的元数
echo ${str:3:4} #从第3个[不包含第3个字符]字符开始,取4个长度的字符
echo ${str: -3} #匹配最后3个字符
echo ${str:3:-4} #去掉前3元素后4元素
echo ${str: -4:-2} #取最后4个元素,跳过2个元素[BASH版本限制centos7可用]

#字符串处理

#-从左向右开始匹配
${var#*word}
${var##*word}

line=$(head -n1 /etc/passwd)
echo "${line#*:}" # - 
echo "${line##*:}" #类似贪婪模式

#-从右向左开始匹配
${var%word*}
${var%%word*}

line=$(head -n1 /etc/passwd)
echo "${line%:*}" # - 
echo "${line%%:*}" #类似贪婪模式

echo ${line/:/;}
echo ${line//:/;}

echo ${line/root/adm} #第1次匹配到的"root"字符替换成"adm"
echo ${line/#root/adm} #开头的"root"替换成"adm"
echo ${line/%root/adm} #结尾的"root"字符替换成"adm"
echo ${line//root} #替换"root"字符为空
echo ${line^^} #转换成大写
echo ${line,,} #转换成小写

#var=${str-expr}

阅读(1925) | 评论(0) | 转发(0) |
0

上一篇:awk学习

下一篇:没有了

给主人留下些什么吧!~~