linux 的awk命令

简介: linux 的awk命令

1.什么是AWK

(1)Aho、Weinberger、Kernighan三位发明者名字首字母;

(2)一个行文本处理工具;

2.AWK基本原理

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;
}
}'
目录
相关文章
|
10天前
|
Web App开发 Linux 网络安全
工作中常用到的Linux命令
工作中常用到的Linux命令
|
10天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
11天前
|
Linux Perl
Linux|从 STDIN 读取 Awk 输入
Linux|从 STDIN 读取 Awk 输入
20 4
|
7天前
|
NoSQL Linux Shell
常用的 Linux 命令
常用的 Linux 命令
28 9
|
2天前
|
域名解析 网络协议 Linux
Linux 中的 Nslookup 命令怎么使用?
【4月更文挑战第12天】
17 6
Linux 中的 Nslookup 命令怎么使用?
|
2天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令
|
3天前
|
网络协议 Ubuntu Linux
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
|
3天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
46 0
|
6天前
|
缓存 运维 监控
Linux系统监控利器:探索常用命令及数据保存技巧
Linux系统监控利器:探索常用命令及数据保存技巧
23 4
Linux系统监控利器:探索常用命令及数据保存技巧
|
9天前
|
Linux 索引
linux 文件查找 和文件管理常用命令
linux 文件查找 和文件管理常用命令
19 0