【Linux学习】强大的文本分析工具AWK

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

 

调用AWK:

1.命令行方式(常用)
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

 

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

 

因为awk其实也是一种编程语言,所以他内置的语法可以直接使用print(类似python2),print也是日常使用中最常见的一种方式。

print函数的参数可以是变量、数值或字符串常量。字符串必须用双引号括起来。参数之间用逗号分隔,如果没有逗号,所有的参数就会被串在一起。逗号等价于OFS中的值,默认情况下是空格。OFS是内建变量。

工作流程:

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

主要掌握print的例子就好。

 

参考链接:

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html(好文)

https://blog.csdn.net/xiyangyang052/article/details/44926793(补充)

https://www.cnblogs.com/kevingrace/p/8481965.html(很多操作示例)

https://www.runoob.com/linux/linux-comm-awk.html(菜鸟教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Knockout】二、监控属性Observables

MVVM和viewModel Knockout是建立在以下三大核心功能之上的: 监控属性和依赖跟踪(Observables and dependency tracking)声明式绑定(Declarative bindings)模板(Templating) 首先让我们先来了解…

【C++学习】对私有构造析构函数的思考:new一个类对象vs直接创建类对象

前置知识: new的类对象需要手动delete。且使用堆空间。且只能用指针接收。 直接创建的类对象创建在栈中(或说堆栈)。不需要手动delete,随着生存周期的结束(如所在的函数return了)而释放,和堆栈…

applyBinding Observables

一般的数据绑定有三种:One-Time,One-Way,Two-way。 One-Time绑定模式的意思即为从viewModel绑定至UI这一层只进行一次绑定,程序不会继续追踪数据的在两者中任何一方的变化,这种绑定方式很使用于报表数据,数据仅仅会加…

【git学习】统计git项目某user的代码量

查看自己的代码量:(直接awk编程) git log --author"username" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, …

一步步编写操作系统 79 在c代码中内联汇编

基本内联汇编是最简单的内联形式,其格式为: asm [volatile] (“assembly code”) 各关键字之间可以用空格或制表符分隔也可以紧凑挨在一起不分隔,各部分意义如下: 关键字asm用于声明内联汇编表达式,这是内联汇编固定…

LeetCode 237. 删除链表中的节点(思维)

请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点 不是末尾节点 。 https://leetcode-cn.com/problems/delete-node-in-a-…

一步步编写操作系统80 扩展内联汇编1

由于基本内联汇编功能太薄弱了,所以才对它进行了扩展以使其功能强大。不过,易用性往往与功能强弱是成正比的,如您所料,扩展内联汇编确实有点难,但在求知欲的驱使下,就让咱们痛并快乐着吧。 gcc本身是个c编…

LeetCode 397. 整数替换

题目大意: 给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。 如果 n 是奇数,则可以用 n 1或n - 1替换 n 。 n 变为 1 所需的最小替换次数是多少? 链接:https://leet…

一步步编写操作系统81 att内嵌汇编语法

内联汇编的格式也变得让人生畏了,感觉既不像C语言,也不像汇编语言,似乎是一种中间产物,不信您看: asm [volatile] (“assembly code” : output : input : clobber/modify) 和前面的基本内联汇编相比,扩展…

LeetCode 375. 猜数字大小 II

题目大意: https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你…

【转】2.3SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)

(三)视图 与传统意义上的数据视图类似,SharePoint中的列表视图指定了列表中数据的筛选条件、排序条件、分组条件、显示栏/字段、显示条目数、显示样式等内容。在SharePoint中,使用SPView表示列表视图,使用SPViewColle…

LeetCode 598. 范围求和 II

https://leetcode-cn.com/problems/range-addition-ii 题目大意 给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。 操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符…

【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

(四)栏/字段 SharePoint中的字段(中文版中叫做“栏”)与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字、日期和时间等)进行区分之外&…

【转】2.5SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

(五)列表条目(SPListItem) SharePoint中数据的存储基本上都是通过列表条目来完成(文档库中的文档也是一种特殊的列表条目),因此在SharePoint应用开发中,最终是要和列表条目打交道的…

【转】3.1SharePoint服务器端对象模型 之 访问文件和文件夹(Part 1)

本节中所阐述的内容,主要适用于SharePoint文档库中的文件和文件夹,以及列表中的文件夹。系统中的其他文件(如_layouts中的文件、配置文件、程序文件等)不在本章节的讨论范围之内。 (一)概述 SharePoint的文…

电影与爆米花(模拟)

题目大意: n个人是朋友,他们坐在一排去看电影,相邻的最多三个人可以吃同一桶爆米花。每个人都想迟到爆米花,问最少需要几桶爆米花? 输入:一个数组,代表这n个人每个人选择的座位号。 输出&…

【转】3.2SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)

4、添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同。 在文档库中,与一般的集合操作相同,直接使用SPFolderCollection的Add(string name)方法即可添加文件夹,例如下面的程序在文档库的根目录中添加一个名为“技术文档”的子文件夹…

【分治】01串

在第一行我们写上一个0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数N和序数K,返回第N行中第K个字符。(K从1开始) 输入格式: 输入在一行中给出2个整数N和K。 N的范围[1,30] K的范围[1,2(N−1)] 输出…

【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

(三)遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库、列表的文件夹和列表条目。遍历主要有三种方式:(1)直接使用文件系统对象模型进行遍历;(2)使用SPDocumentLibrary进行遍…

【思维构造】跳跃游戏

题干: 有一种跳跃游戏:假设初始位置在数轴的原点处,每一次可以选择两种操作: 向前k步或向后一步(k为当前的移动次数,即第k次跳跃k步)。给定一个终点D(D>0)&#xff0…