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,未初始化,所以 arraya 为 0(假),所以 !0 取反为真,打印数组元素a,然后"++"自增运算符将变量值 +1。

遇到到重复值的时候,因为 arraya 已经存在,arraya 为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
}'
相关推荐
qetfw19 小时前
Linux 文件清理:find、mtime 与安全传参验证
linux·shell·1024程序员节
Lsetea3 天前
curl下载HTTPS文件报23:证书验证成功与本地写入失败分层排查
linux·https·shell·ssl证书·curl
DogDaoDao4 天前
Windows 双 Shell 全面对比:CMD 与 PowerShell 的技术剖析
windows·shell·测试·powershell·cmd·程序员开发
Lsetea5 天前
OpenSSL的checkhost显示不匹配却退出0:名称检查与证书验收
linux·https·shell·ssl证书·openssl
钱栈up8 天前
耳机音效不对,我顺手查了系统更新,结果挖出个崩溃了整天的服务
windows·shell
qetfw8 天前
grep 文本筛选:匹配、反选与退出状态验证
linux·shell
xbzb15 天前
Shell 函数:语法、传参与递归调用一次讲透
shell·递归·函数·调用·传参·递归调用
东鹏特饮16 天前
15个实用Linux运维脚本
linux·运维·shell·脚本·redhat·常用生产脚本
Zoom16 天前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
rust·electron·shell
Lsetea25 天前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls