1分钟懂awk-技不在深,够用就行

简介: 对不起,楼主欺骗了你,认真看完本文或许不止1分钟。不过,如果你真的认真阅读并超过了1分钟,相信你会有收获。

image.png

1.AWK

(1)Aho、Weinberger、Kernighan三位发明者名字首字母;
(2)一个行文本处理工具;

2.基本原理

2.1原理:逐行处理文件中的数据

2.2语法:

awk 'pattern + {action}'

说明:
(1)单引号”是为了和shell命令区分开;
(2)大括号{}表示一个命令分组;
(3)pattern是一个过滤器,表示命中pattern的行才进行action处理;
(4)action是处理动作;
(5)使用#作为注释;
例子:显示hello.txt中的第3行至第5行

cat hello.txt | awk 'NR==3, NR==5{print;}'

2.3pattern说明
pattern参数可以是egrep正则中的一个,正则使用/pattern/
例子:显示hello.txt中,正则匹配hello的行

cat hello.txt | awk '/hello/'

说明:
(1)pattern和action可以只有其一,但不能两者都没有;
(2)默认的action是print;
例子:显示hello.txt中,长度大于100的行号

cat hello.txt | awk 'length($0)>80{print NR}'

3.内置变量

FS 分隔符,默认是空格
NR 当前行数,从1开始
NF 当前记录字段个数
$0 当前记录
$1~$n 当前记录第n个字段
例子:显示hello.txt中的第3行至第5行的第一列与最后一列

cat hello.txt | awk 'NR==3, NR==5{print $1,$NF}'

4.内置函数

gsub(r,s):在$0中用s代替r
index(s,t):返回s中t的第一个位置
length(s):s的长度
match(s,r):s是否匹配r
split(s,a,fs):在fs上将s分成序列a
substr(s,p):返回s从p开始的子串

5.操作符

5.1运算符
类似于c,支持+、-、*、/、%、++、–、+=、-=等诸多操作;

5.2判断符
类似于c,支持==、!=、>、=>、~(匹配于)等诸多判断操作;

6.控制流程

6.1.BEGIN和END
BEGIN和END本质是一个pattern。
BEGIN用于awk程序开始开始前,做一些初始化的工作;
END用于awk程序结束前,做一些收尾的工作。
例子:统计字符个数

awk '
BEGIN
{
count=0;
}
{
count+=length($0);
}
END
{
print count;
}'

6.2流程控制语句
(1)if(condition){}else{}
(2)while{}
(3)do{}while(condition);
(4)for(init;condition;step){}
(5)break/continue:如果有END,会执行END中的收尾工作
个流程控制语句用法几乎与c相同。

7.awk与shell的交互

(1)awk中使用shell中定义的变量:使用单引号即可;

#!/bin/bash
STR="hello"
echo | awk '{
print "'${STR}'";
}'

(2)awk中使用shell命令:使用双引号,或者system命令;

#!/bin/bash
echo hello | awk '{
print $0 | "cat"
}'

或者

#!/bin/bash
echo | awk '{
system("date > date.txt")
}'

(3)awk中的变量传出至shell:没有什么好方法,老老实实用文件吧;
(4)getline:awk里,从文件中读取变量到awk中

#!/bin/bash
echo | awk '{
while(getline < "date.txt")
{
print $0;
}
}'

结束语:对不起,楼主欺骗了你,认真看完本文或许不止1分钟。不过,如果你真的认真阅读并超过了1分钟,相信你会有收获。

目录
相关文章
|
3月前
|
存储 测试技术 Linux
关于kunit的一点够用就行知识概念
关于kunit的一点够用就行知识概念
65 0
|
7月前
|
数据可视化 Linux
Linux常用命令太多,按这6种方法,帮助你有效掌握命令
Linux常用命令太多,按这6种方法,帮助你有效掌握命令
|
3月前
|
测试技术
关于kunit的二点够用就行知识概念
关于kunit的二点够用就行知识概念
42 0
|
9月前
|
存储 编译器 C语言
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
在之前我们编写的程序中,我们总要录入一些数据给予程序用于计算,但是当我们退出程序后录入的数据会销毁,因为此时数据都是存放在内存中。等到下次再运行程序时,数据又得从新录入,这样就非常的难受。
38 0
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
|
10月前
|
缓存 自然语言处理 小程序
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
137 0
|
11月前
|
Linux C语言
学习系统编程No.7【进程替换】
学习系统编程No.7【进程替换】
|
11月前
|
存储 机器学习/深度学习
二叉树详解一万字(基础版)看着一篇就够了(上))
树的结构是一种非线性的数据结构,它是由n(n>=0)个节点组成的一个有层次的关系集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说他是根朝上,而叶朝下。
65 0
|
数据库
【高效编码】查询日志的命令老是记不住?没关系,这篇文章帮你记
您好,我是码农飞哥,一直想飞暂时在跑个那个老哥。
207 0
【高效编码】查询日志的命令老是记不住?没关系,这篇文章帮你记
|
存储 SQL 关系型数据库
覆盖索引这回事算是整明白了
覆盖索引这回事算是整明白了
199 0
覆盖索引这回事算是整明白了
|
Shell
Ansible概述和模块解释(你刚走过了今天,而扑面而来的却是昨天)(三)
Ansible概述和模块解释(你刚走过了今天,而扑面而来的却是昨天)(三)
228 0
Ansible概述和模块解释(你刚走过了今天,而扑面而来的却是昨天)(三)