shell数组与awk数组

shell数组与awk数组1.whilereadlinedo hosts[i++]=$linedone</etc/hosts#遍历foriin${!hosts[@]}do echo”hosts数组的索引:$i,索引对应的值:${hosts[$i]}”done1.数组值的自增[root@manager/tmp/sh/2020-12-09_题]#declare-Aip#声明一个数组ip[root@manager/tmp/sh/2020-12-09_题]#echo

大家好,又见面了,我是你们的朋友全栈君。

一.数组基本概述

1.什么是数组 数组其实也算是变量, 传统的变量只能存储一个值, 但数组可以存储多个值。

2.数组的分类 shell数组分为普通数组和关联数组 普通数组:只能使用整数 作为数组索引 关联数组:可以使用字符串 作为数组索引
在这里插入图片描述

二.数组基本使用

1.普通数组仅能使用整数来作为索引

(1).普通数组的赋值

#方式一, 针对每个索引进行赋值(数组名[索引]=变量值)

[root@manager /tmp/sh/awk]# array1[0]=pear
[root@manager /tmp/sh/awk]# array1[1]=apple
[root@manager /tmp/sh/awk]# array1[2]=orange

#方式二, 一次赋多个值 ( 数组名=(多个变量值) )

[root@manager /tmp/sh/awk]# array2=(tom jack alice)
[root@manager /tmp/sh/awk]# array3=(tom jack alice "bash shell")

(2).如何查看普通数组的赋值与访问数组的内容

#方式一,查看所有数组

[root@manager /tmp/sh/awk]# declare -a
declare -a array1='([0]="pear" [1]="apple" [2]="orange")'
declare -a array2='([0]="tom" [1]="jack" [2]="alice")'
declare -a array3='([0]="tom" [1]="jack" [2]="alice" [3]="bash shell")'

#方式二,查看某数组的所有值(echo ${array1 [ @ | * ] )

[root@manager /tmp/sh/awk]# echo ${ 
   array1[@]} 
pear apple orange

#方式三,查看某数组某索引对应的数组值

[root@manager /tmp/sh/awk]# echo ${ 
   array1[0]}       #数组名加索引即可访问数组中的元素
pear

#方式四,查看某数组的所有索引

[root@manager /tmp/sh/awk]# echo ${ 
   !array1[@]}
0 1 2

2.关联数组能使用字符串的方式作为索引

(1).关联数组的赋值

#1.必须先申明这是一个关联数组

[root@manager /tmp/sh/awk]# declare -A info
[root@manager /tmp/sh/awk]# declare -A info2

#2.方式一, 关联数组的赋值 (数组名[索引]=变量值 )

[root@manager /tmp/sh/awk]# info[index1]=pear
[root@manager /tmp/sh/awk]# info[index2]=apple
[root@manager /tmp/sh/awk]# info[index3]=orange

#3.方式二, 关联数组的赋值 (数组名=([索引1]=变量值2 [索引2]=变量值2) )

[root@manager /tmp/sh/awk]# info2=([index1]=linux [index2]=nginx [index3]=docker [index4]='bash shell')

#4.查看关联数组

[root@manager /tmp/sh/awk]# declare -A

2.如何访问关联数组中的数据

[root@manager /tmp/sh/awk]# echo ${ 
   info2[index2]}   #访问数组中的第二个元数
nginx
[root@manager /tmp/sh/awk]# echo ${ 
   info2[@]}    #访问数组中所有元数 等同于 echo ${ 
   info2[*]}
bash shell linux nginx docker
[root@manager /tmp/sh/awk]# echo ${ 
   !tt_array2[@]} #访问数组中所有元数的索引
index4 index1 index2 index3

三.在sehll中使用数组,统计文件信息

1.普通数组赋值与遍历示例

while read line
do
	# i从0开始自增,索引0对应文件内容第一行,往后依次对应
	hosts[i++]=$line
done</etc/hosts
# 遍历
# 取反得出所有索引,以此为循环
for i in ${ 
   !hosts[@]}
do
	# 输出所有索引,并打印索引对应的值
	echo "hosts数组的索引: $i , 索引对应的值: ${hosts[$i]}"
done

2.使用关联数组统计文件中的男女性别

#1.准备对应的文件
[root@manager /tmp/sh/awk]# cat sex.txt
jack   m
alice  f
tom    m
rose   f
robin  m
bgx    m
​
[root@manager /tmp/sh/awk]# cat count_sex.sh
#!/usr/bin/bash
declare -A sex
#1.对数组进行赋值
while read line
do
	type=$(echo $line|awk '{print $2}')  #2.取出第二列的内容
	let sex[$type]++					 #3.定义一个关联数组,让数组的值不断自增
done< sex.txt
​
#4.遍历数组
for i in ${ 
   !sex[@]}
do
  echo "$i ${sex[$i]}"
done

3.数组值的自增演示

[root@manager /tmp/sh/2020-12-09_题]# declare -A ip  #声明一个数组 ip
[root@manager /tmp/sh/2020-12-09_题]# echo ${ 
   ip[aa]}  #输出索引为aa的ip数组的初始值,显示为空,其实为0

[root@manager /tmp/sh/2020-12-09_题]# let ip[aa]++  #让索引为aa的ip数组值自增
[root@manager /tmp/sh/2020-12-09_题]# echo ${ 
   ip[aa]}  #再输出,可以看到,其值变为1
1
[root@manager /tmp/sh/2020-12-09_题]# let ip[aa]++
[root@manager /tmp/sh/2020-12-09_题]# echo ${ 
   ip[aa]}
2
[root@manager /tmp/sh/2020-12-09_题]# let ip[aa]++
[root@manager /tmp/sh/2020-12-09_题]# echo ${ 
   ip[aa]}
3

4.统计用户的shell

#!/bin/bash
# **********************************************************
# * Author        : oldwang
# * Email         : lilulilu6666@163.com
# * Create time   : 2020-12-09 17:26
# * Filename      : 01.sh
# * Description   : lueluelue
# **********************************************************
#声明一个数组shells
declare -A shells

#遍历文件/etc/passwd中的值
while read line
do
	#截取最后一列,即用户的shell
	types=$(echo $line | awk -F ':' '{print $NF}')
	#以shell作为索引,让每个shell对应的值自增
	let shells[$types]++
done</etc/passwd

#${ 
   !shells[@]},得到所有的索引值,即为所有的shell类型
for i in ${ 
   !shells[@]}
do
	#输出:shell类型,出现次数
	echo "索引是: $i , 索引出现的次数: ${shells[$i]}"
done

四.awk数组

1.对nginx的访问日志进信息统计,rul的访问次数前十名,并统计访问大小

[root@manager /tmp/sh/awk]# cat access.awk 
{ 
   
        #次数
        ngx_url_count[$7]++
	    #大小
        ngx_url_size[$7]+=$10
}
END{ 
   
        for ( i in ngx_url_count ) { 
   
                print ngx_url_count[i],i,ngx_url_size[i]/1024"kb"
        }
}

[root@manager /tmp/sh/awk]# awk -f access.awk access.log | sort -nr | head
4733 / 2602.81kb
746 /course/ajaxmediauser/ 42.998kb
467 /course/ajaxmediauser 26.1494kb
307 /socket.io/1/ 27.6963kb
132 /u/card 44.0996kb
109 /favicon.ico 156.215kb
103 /api3/savemediafinish 10.665kb
96 /api3/getinvitemeuserlist 11.8184kb
94 /api3/latest 61.3027kb
93 /u/loading 5.99512kb

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161657.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • git branch 命令查看分支、删除远程分支、本地分支

    git branch 命令查看分支、删除远程分支、本地分支gitbranch命令操作1、查看本地分支:gitbranch前面带有*号的是当前分支2、删除本地分支:gitbranch-d[branchname]提示删除了一个名为list的本地分支3、删除远程分支:gitpushorigin–delete[branchname]提示删除了一个名为201804019-test-files的…

    2022年6月20日
    64
  • microbiomeViz:绘制lefse结果中Cladogram「建议收藏」

    microbiomeViz:绘制lefse结果中Cladogram「建议收藏」平日经常会分析shotgun宏基因组的数据,我们的pipeline使用MetaPhlAn,Kraken等profiler。这种数据经常会产生一个表格,如下download.file(“https://bitbucket.org/biobakery/biobakery/raw/tip/demos/biobakery_demos/data/metaphlan2/output/SRS014459-Stool_profile.txt”,’SRS014459-Stool_profile.txt’)knitr

    2022年5月18日
    43
  • java 取余 小数_Java小数取余问题求助「建议收藏」

    java 取余 小数_Java小数取余问题求助「建议收藏」2016-09-0101:19最佳答案楼上的全不明白楼主的意思,楼主要的是算法,不是程序你们懂吗!!!我只能说你们不懂什么叫真正的算法,你们只是计算机的傀儡,我看了你们回答非常生气,高校教出来的就是这种“人才”,连算法都不懂。还不如我一高中生。严重BS楼上的,尤其是说java语言的那位。我来告诉你这个问题用递推解决首先要你承认一个公式,我是习惯pascal语言的,c++怕写错,反正只是算法,你忍…

    2022年6月6日
    47
  • python读取excel单元格内容_python如何读取文件夹下的所有文件

    python读取excel单元格内容_python如何读取文件夹下的所有文件python读取excel文件的内容可以方便我们查看信息。#-*-codeing=utf-8-*-#@Time:2022/4/1621:06#@Author:ning#@File:xlsx.py#@software:PyCharm#引入xlrd2去支持读取xlsx相关的文件importxlrd2#定义文件名file_name=’4016.xlsx’#读取xlsx文件#预计输出#4016.xlsx该文件有2个tab页sku_

    2022年10月2日
    4
  • 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜

    2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜注:本文转载自网络,不代表本平台立场,仅供读者参考,著作权属归原创者所有。我们分享此文出于传播更多资讯之目的。如有侵权,请在后台留言联系我们进行删除,谢谢!相信对很多朋友们来说,一款好用的5G智能手机是非常值得入手的,小编为大家带来最新的20年11月值得购买的性价比5G手机榜单,相信会给您更好的手机选购指导,为你带来更好的智能生活体验,有喜欢的朋友们一起来看看吧。1、一加8Pro性能一…

    2022年5月8日
    170
  • 使用withCount后再使用select设置查询的字段。就找不到withCount的数据了

    使用withCount后再使用select设置查询的字段。就找不到withCount的数据了

    2021年11月8日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号