awk嵌套awk

以下内容基于一个真实的故事,尽管某些名称和详细信息已更改。

很久以前,在一个遥远的地方,有一间办公室。 由于各种原因,该办公室没有购买速溶咖啡。 那个办公室的一些工人聚在一起,决定建立“咖啡角”。

Coffee Corner的一名成员将购买速溶咖啡,其他成员将偿还。 结果是有些人喝的咖啡比其他人多,因此增加了“半员”级别:每周允许一半成员喝有限数量的咖啡,并且支付一半的费用。

处理这是一个巨大的痛苦。 我刚刚阅读了Unix编程环境,并想练习AWK编程。 因此,我自愿创建了一个系统。

第1步:我保留了一个成员数据库以及他们对Coffee Corner的债务数据库。 我以AWK友好格式进行了此操作,其中字段之间用冒号分隔:

member:john:1:22
member:jane:0.5:33
member:pratyush:0.5:17
member:jing:1:27

上面的第一个字段标识这是哪种行(成员)。 第二个字段是成员的姓名(即,他们的电子邮件用户名,不含@)。 下一个字段是其成员资格级别(完整= 1或一半= 0.5)。 最后一个领域是他们对咖啡角的债务。 正数表示他们欠钱,负数表示Coffee Corner欠他们钱。

步骤2:我记录了Coffee Corner的输入和输出日志:

payment:jane:33
payment:pratyush:17
bought:john:60
payback:john:50

Jane支付了33美元,Pratyush支付了17美元,John支付了60美元的咖啡,Coffee Corner支付了John 50美元。

步骤3:我准备编写一些代码。 该代码将处理会员和付款,并吐出带有新债务的更新会员文件。

 #!/usr/bin/env --split-string=awk -F: -f  

#! )行需要一些工作! 我使用env命令允许从shebang传递多个参数:具体地说,AWK的-F命令行参数告诉它字段分隔符是什么。

AWK程序是一系列规则。 (它也可以包含函数定义,但“ Coffee Corner”不需要任何函数。)

第一条规则读取成员文件。 当我运行该命令时,我总是首先给它提供成员文件,然后给它付款文件。 它采用AWK关联数组债务阵列中的成员阵列和目前的债务创纪录的会员级别。

$1 == "member" {
members[$2]=$3
debt[$2]=$4
total_members += $3
}

第二条规则在记录付款时减少了债务。

$1 == "payment" {
debt[$2] -= $3
}

投资回报是相反的:它增加了债务。 这很好地支持了意外给某人太多钱的情况。

$1 == "payback" {
debt[$2] += $3
}

最复杂的部分发生在有人购买( “购买” )速溶咖啡供咖啡俱乐部使用时。 它被视为付款,并且该人的债务减少了适当的金额。 接下来,它计算每个成员的费用。 它会根据成员级别对所有成员进行迭代并增加其债务。

$1 == "bought" {
debt[$2] -= $3
per_member = $3/total_members
for (x in members) {
debt[x] += per_member * members[x]
}
}

END模式很特殊:当AWK没有更多行要处理时,它只会发生一次。 此时,它将吐出具有更新债务水平的新成员文件。

END {
for (x in members) {
printf "%s:%s:%s\n", x, members[x], debt[x]
}
}

该系统连同遍历成员的脚本以及向人们发送提醒电子邮件以支付其应收账款(欠款)的脚本,还对咖啡角进行了相当长的一段时间的管理。

翻译自: https://opensource.com/article/19/2/drinking-coffee-awk

awk嵌套awk

awk嵌套awk_与AWK一起喝咖啡相关推荐

  1. awk是什么?awk工作原理是什么?怎么用awk?

    一.awk介绍  1. awk概述awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具.数据可以来自标准输入.一个或多个文件, ...

  2. MoeCTF 2021Re部分------大佬请喝咖啡,A_game

    文章目录 大佬请喝咖啡 反编译 解释\u: z3解码 A_game 数独题: 这里判断行数据是1~9: 这里判断列数据是1~9: 9*9数独阵分为9个3*3方阵,每个方阵数据1~9 进行异或magic ...

  3. 为什么以前那种到处喝咖啡创业的场景一去不复返了?

    我之前看过一篇文章,说的大概意思就是那些假装高逼格的创业公司都死了.而那些一边喝咖啡一边创业的人表面看起来确实是高大上,但精力并没有用在刀刃上,所以企业迟早会挂掉. 我之前就认识一个创业的人,这个人也 ...

  4. 为什么手机联系人里有permission_为什么有人在咖啡馆里不看手机不看电脑没有同伴,独自喝咖啡?...

    通常,你是因为什么原因,在咖啡馆停留?聊天?谈事?工作?学习? 如果你经常去咖啡馆,你也许不会发现,有这样一类人,他们一个人,坐在咖啡馆里,不看手机,不看电脑,没有同伴,只是静静地坐在那里,喝咖啡.他 ...

  5. 设计模式:模板方法模式(C++)【喝咖啡还是喝茶】

    模板方法模式介绍 我们在软件设计中经常会有一些步骤是一样的,只是实现不一样,这种情况我们就可以使用模板方法模式.何为模板,就是有固定的步骤,可以复用嘛.来看看模板方法模式:定义一个操作中的算法的骨架, ...

  6. awk分割列-【AWK学习之旅】

    ---===AWK学习之旅===--- awk 内置分割函数:split,将列按照指定分割符,分割成数组 用法:split(str1,array,"分隔符") 文件内容: [roo ...

  7. 10年后重温《我奋斗了18年才和你坐在一起喝咖啡》

      很早之前就看过这篇文章,具体都忘了什么时候了,当时感触颇深!这篇文章是2007年左右由网友麦子发的,至今已有11年之久!然而这么多年过去了,情况到底有多好?似乎也没多大改变!穷人比以前好了,貌似有 ...

  8. 我奋斗了10年才能和你坐在一起喝咖啡

    我的白领朋友们,如果我是一个初中没毕业就来南京打工的民工,你会和我坐在"星巴克"一起喝咖啡吗?不会,肯定不会.比较我们的成长历程,你会发现,为了一些在你看来唾手可得的东西,我却需要 ...

  9. (P9)awk:什么是awk,awk简单用法,awk脚本语法,awk执行过程

    文章目录 1.什么是awk 2.awk简单用法 3.awk脚本语法 4.awk执行过程 1.什么是awk awk 是什么 awk 是一种用于处理数据和生成报告的编程语言 awk 可以在命令行中进行一些 ...

最新文章

  1. 表弟高考650多,程序员不建议学计算机,亲戚:你不希望别人好
  2. centos 更换java版本_centos7 更换jdk版本
  3. 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
  4. sqlite3命令大全
  5. ES6新特性之Promise
  6. kubeadm reset后安装遇到的错误:Unable to connect to the server: x509: certificate signed by unknown authority
  7. 梯度与梯度下降法详解
  8. linux 串口text模式安装,使用串口安装centos操作系统
  9. php yii2 sns,GitHub - yggphpcoder/iisns: 基于 yii2 的 sns 社区系统,一站式解决社区建站...
  10. conda deactivate python3_conda进行python环境隔离
  11. 【报告分享】2020中国股民图鉴.pdf(附下载链接)
  12. Opencv step by step - 图像变换
  13. Centos 安装libreoffice 以及 word转pdf转html转epub转txt
  14. ResNet到底在解决一个什么问题呢?
  15. PHP 开发者应了解的 24 个库
  16. 2021-11-06大数据学习日志——数据埋点+网络爬虫——数据提取
  17. 基于Java编写的网络五子棋
  18. MCAL_VADC配置
  19. document onload和window onload的区别?
  20. CTFshow-命令执行(4)

热门文章

  1. 面试题:为什么局部变量不赋初始值报错
  2. Scrapy读取设置文件(settings.py)
  3. RocketMQ如何动态扩容和缩容
  4. 分布式事务中间件Seata简介
  5. Redis 哨兵(sentinel)模式集群配置(5.0.3版本)
  6. “智享未来 知行合一”,开为科技助力企业开启人工智能新时代
  7. 11.4. String 字符串处理
  8. poj2104 k-th number 主席树入门讲解
  9. Linux-yum在线安装svn步骤
  10. 一起谈.NET技术,Silverlight 应用整合