精选文章 awk记录-1

awk记录-1

作者:海德堡绝尘 时间: 2018-03-27 05:55:58
海德堡绝尘 2018-03-27 05:55:58

a. 准备工作 marks.txt 本文件有4列

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

marks2.txt 本文件有部分列有5列

1)    Andy     Physics    80
2)    Jacky    Maths      90    10
3)    Hill    Biology    87
4)    John    English    85 12
5)    Mary     History

b. 样例

  • (1).文本加标题行 "序号 姓名 科目 分数" 显示:
    >awk 'BEGIN {printf "序号\t姓名\t科目\t分数\n"} {print}' marks.txt 
    序号  姓名  科目  分数
    1)    Amit     Physics    80
    2)    Rahul    Maths      90
    3)    Shyam    Biology    87
    4)    Kedar    English    85
    5)    Hari     History    89
  • (2).执行awk脚本:将单引号内的脚本写到一个文件,然后通过 -f 引用文件执行:
    
    > cat command.awk 
    BEGIN {printf "序号\t姓名\t科目\t分数\n"} {print}

awk -f command.awk marks.txt
序号 姓名 科目 分数
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89

- (3). `-v`声明一个变量的值,BEGIN前分配 

awk -v user=root 'BEGIN{printf "name=%s\n", user}' `
name=root

- (4).  计算:   + - * / %

awk 'BEGIN {a=52; b=50; print "a%b=", (a%b)}' `
a%b= 2

- (5).  BEGIN END 定义变量a,在处理行的过程中增加(可以与行内的内容进行计算),END时输出:(计算总分数)

awk 'BEGIN { sumScore = 0; printf "总分数sumScore = %d\n", a } {sumScore=sumScore+$NF;print} END{print ">总分数sumScore=",sumScore}' marks.txt`
总分数sumScore = 0
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
总分数sumScore= 431


![疲劳的分割线](http://upload-images.jianshu.io/upload_images/3858200-38e21a294ccf66ce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

awk内置变量: NR FNR NF

NR = Number of Records
NF = Number of Fields
FNR = File Number of Records
下面摘自: The GNU Awk User’s Guide

awk divides the input for your program into records and fields. It keeps track of the number of records that have been read so far from the current input file. This value is stored in a predefined variable called FNR, which is reset to zero every time a new file is started. Another predefined variable, NR, records the total number of input records read so far from all data files. It starts at zero, but is never automatically reset to zero.
......
The value of the built-in variable NF is the number of fields in the current record.

翻译与小结
awk将程序的输入分为记录和字段。
它跟踪从当前输入文件到目前为止已经读取的记录数量。

FNR 该值存储在一个名为FNR的预定义变量中,每启动一个新文件时,该变量将重置为零。【每行的行号-单个文件

NR 另一个预定义变量NR记录从所有数据文件中读取的输入记录总数。 它从零开始,但 从不 自动重置为零。【每行的行号-全部文件

NF 内置变量NF的值是当前记录中的字段数。在执行块中$NF可以得到当前行末字段的值

  • (6). 打印全局行号 当前行号 行内列数 行末字段值
    
    > awk 'BEGIN{print "全局行号\t当前行号\t行内列数\t行末字段值"} {print NR,"\t", FNR,"\t", NF,"\t", $NF}' marks.txt marks2.txt

全局行号 当前行号 行内列数 行末字段值
1 1 4 80
2 2 4 90
3 3 4 87
4 4 4 85
5 5 4 89
6 1 4 80
7 2 5 10
8 3 4 87
9 4 5 12
10 5 3 History


![疲劳分割线](http://upload-images.jianshu.io/upload_images/3858200-1ff80eb81fe3ad88.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:rsync+inotify实现文件实时同步-步骤详解

下一篇:解决stackoverflow无法登陆问题

您可能感兴趣

  • MemCache详细解读

    本节内容主要关于mencache的工作原理,memcache的应用场景及其应用实例配置,memcache安装部署。 一、Memcached工作原理 1.服务端缓存实现 (1)memcached特性 分布式: 实例和缓存在逻辑上是分离的 普通缓存 Memcached缓存 特 性 缓存与特定的应用实例绑定,每个应用实例只能访问特定的缓存 实例独立于各个应用服务器实例运行,每应用实例可以访问任意缓...

  • OpenCV 识别图片中的米粒个数,并计算米粒的平均面积和长度(转)

    介绍 OpenCV+Python 使用OpenCV构建图像识别算法,识别图片中的米粒个数,并计算米粒的平均面积和长度 软件架构 模块:OpenCV 4.0.0.21 编程语言:Python 3.7.2 编译器:PyCharm 2018 程序设计思路 首先介绍一下程序设计的思路: 图像采集(取到图像):可以用摄像头拍摄或者图片直接导入 图像预处理:对图像进行灰度化 基于灰度的阈值分割:使用局部...

  • CentOS:安装配置Scala、IDEA

    前言 前提准备:JDK 1.8 注:若已安装了spark,记住spark与Scala是要严格遵守两者的版本对应关系,更多详情查看Spark官网 由于之前我安装了Spark 2.4.4,所以这里安装了scala 2.11.12 正文 1. 到官网下载Scala安装包 https://www.scala-lang.org/download/all.html 2. 解压 # 解压到/usr/loc...

  • 阿里2020/8/3笔试题(一)

    第二题地址:阿里2020/8/3笔试题(二) 阿里笔试共一个小时,两道编程题目,平台为牛客网。 没做出来,重在参与了。第一题有思路,但是后来经验证还是有漏洞,遂去牛客找大佬的思路,因此用本博客来记录一下打怪生涯。 第一题:有n个人,每人有对应的钱币,有m个房子,每个房子有对应的价值和舒适度。 每个人只能买一个房子,每个房子只能被一个人买,求最大的舒适度和。 思路:贪心算法,让每个人买能够买范...

  • IntellIJ IDEA2020新功能

    一、java 1、Java 14支持:记录和模式匹配 IntelliJ IDEA 2020.1添加了对Java 14及其新功能的支持。IDE不仅添加了对Records的完整代码洞察支持,而且还使您能够快速创建新记录并生成其构造函数和组件,并警告存在的错误。您还将发现对instanceof运算符的模式匹配的支持,包括新的检查和快速修复,该快速修复通过用新的简洁模式变量替换它们来快速简化冗长的i...

  • Java虚拟机六:Java进程占用cpu过高问题分析

    在平时开发过程中,经常会碰到Java进程占用cpu过高的现象,本篇将简单记录一下自己分析该类问题的步骤。   1.使用 top -p 命令(为Java进程的id号)查看Java进程的cpu占用:      该Java进程占用cpu达到92.2%。   2.使用 top -Hp 命令(为Java进程的id号)查看该Java进程内所有线程的资源占用情况(按shft+p按照cpu占用进行排序,按s...

  • CRM管理策略为什么能增加企业利润?

    CRM(客户关系管理)是一种管理策略,它的核心在于企业用来管理它们与现有客户和潜在客户之间互动的所有活动、策略与技术,让你的客户在不同阶段的客户生命周期都有最佳体验。在很多企业内,我们都能听到“顾客至上”这句话,如果制定有效的CRM管理策略,带给客户良好的体验,可以帮助企业实现利润的增长。 为什么CRM管理策略能增加企业利润? 无论在哪个行业,客户忠诚度都是非常重要,CRM帮助企业与客户建立...

  • sql语句-根据不同状态分组查询不同字段总和

    首先展示一下我需要处理的表~ 我首先想到的是根据freeze_status的不同状态分组查询,分别得到两种状态写的冻结积分(integral_frozen)总和,然后再通过union 连接两个不同的查询语句,sql语句如下: select user_id, SUM(integral_frozen),freeze_status from ws_user_account where freeze...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
51CTO

51CTO

51CTO是一家综合的IT技术用户服务平台,立足满足用户多维度需求,为技术用户成长赋能。2005年成立至今,拥有专业主流技术媒体51CTO企业信息化媒体CIOAge中国最大的IT在线教育平台51CTO学院。