Shell编程:awk 数组及自定义函数实践

一、数组实践

1、数组定义和简单调用

创建数组 score,定义三个课程元素,并赋值

bash 复制代码
awk 'BEGIN{score["yuwen"]=98;score["shuxue"]=99;score["yingyu"]=100;print score["yuwen"],score["shuxue"],score["yingyu"]}'

2、遍历数组

使用 for 循环遍历数组,注意不能用关键字 index

bash 复制代码
awk 'BEGIN{score["yuwen"]=98;score["shuxue"]=99;score["yingyu"]=100;for(i in score){print score[i]}}'

3、自动遍历数组

bash 复制代码
awk -F',' '{for(i=1;i<NF;i++){array[i]=$i};for(j in array){print array[j]}}' data.csv

4、数组去重

awk中,0 为假,非 0 为真

array[0\]++ 第一次执行时为 array\[0],未初始化,所以 array[a] 为 0(假),所以 !0 取反为真,打印数组元素a,然后"++"自增运算符将变量值 +1。

遇到到重复值的时候,因为 array[a] 已经存在,array[a] 为1(真),所以 !1 取反后为假,所以不在打印当前内容,达到去重目的

bash 复制代码
awk '!array[$0]++' data1.csv

二、自定义函数实践

语法格式

bash 复制代码
function 函数名(参数1, 参数2, ...)
{
函数体代码
}

函数名不能用 awk 的关键字信息

简单实践

bash 复制代码
awk '
function add_func(num1, num2)
{
  return num1 + num2
}

function sub_func(num1, num2)
{
  if (num1 > num2)
     return num1 - num2
     return num2 - num1
}

BEGIN {
  sum_result=add_func(10, 20)
  print "两值之和为: "sum_result
  sub_result=sub_func(10, 20)
  print "两值之差为: "sub_result
}'
相关推荐
VincentHe3 天前
当 ServerCat 遇上 Shell 环境变量:一次服务器监控性能优化记录与探索
服务器·shell·监控
虚伪的空想家5 天前
ip网段扫描机器shell脚本
android·linux·网络协议·tcp/ip·shell·脚本·network
谅望者6 天前
Linux文件查看命令完全指南:cat、less、head、tail、grep使用详解
linux·excel·less·shell·文件操作·命令行·系统运维
hello_2508 天前
Shell脚本高效编写技巧
运维·shell
leaf9z9 天前
阿里云ECS在线扩容磁盘
阿里云·云计算·shell
gfdgd xi11 天前
deepin 终端,但是版本是 deepin 15 的
linux·python·架构·ssh·bash·shell·deepin
大米粥哥哥15 天前
Qt QProcess基于Linux的命令管道符号无效问题【已解决】
linux·qt·shell·qprocess·1024程序员节·管道符号
缘友一世21 天前
深入理解Shell与反弹Shell:从原理到实战
linux·网络安全·shell
hour_go23 天前
Linux Shell 实验一:数据采集与脚本调试错误总结
linux·笔记·bash·shell·实验报告·错误排查
struggle202524 天前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell