不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Linux入门

  • Linux高级

    • 01.Linux正则
    • 02.find
    • 03.grep
    • 04.sed
    • 05.awk
      • 01.awk作用
        • 1.1 awk作用
        • 1.2 awk常用指令
      • 02.awk使用
        • 2.1 awk常用指令
        • 2.2 awk基本语法
        • 2.3 正则匹配
        • 2.4 NF
        • 2.5 NR
        • 2.6 操作符
  • Nginx

  • Keepalive

  • ansible

  • zabbix

  • Shell

  • Linux内核

  • Linux
  • Linux高级
xiaonaiqiang
2021-02-13
目录

05.awk

# 01.awk作用

**更多详细内容参考:**https://www.cnblogs.com/xiaonq/p/11969744.html

# 1.1 awk作用

  1. awk是一种编程语言,用于在linux下对文本和数据进行处理
  2. awk的处理文件和数据处理方式是逐行扫描,寻找到匹配的行,并在这些行上进行你想要的操作
  3. 如果没有指定处理动作,则把匹配的行显示到屏幕上

# 1.2 awk常用指令

//              # 匹配代码块,可以是字符串或正则表达式
{}              # 命令代码块,包含一条或多条命令
$0              # 表示整个当前行
$1              # 每行第一个字段
NF              # 字段数量变量
NR              # 每行的记录号,多文件记录递增
/[0-9][0-9]+/      # 两个或两个以上数字
/[0-9][0-9]*/      # 一个或一个以上数字
-F'[:#/]'         # 定义三个分隔符
FNR             # 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t              # 制表符
\n              # 换行符
FS              # BEGIN时定义分隔符
RS              # 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~               # 匹配,与==相比不是精确比较
!~              # 不匹配,不精确比较
==              # 等于,必须全部相等,精确比较
!=              # 不等于,精确比较
&&             # 逻辑与
||              # 逻辑或
+               # 匹配时表示1个或1个以上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 02.awk使用

# 2.1 awk常用指令

cat /etc/passwd |awk -F ':' '{print $1}'             # 以冒号为分隔打印第一列数据
cat /etc/passwd | awk -F ':' '{print $1"\t"$7}'      # 打印第一列和第七列数据,并以制表符分隔
awk -F ':' '/root/{print $1}' /etc/passwd            # 搜索/etc/passwd有root关键字的所有行,只显示第一行
w|awk 'NR==1{print $6}'                              # 显示第一行第六列的数据
awk -F: 'NR==5 || NR==6{print}' /etc/passwd          # 打印第五行和第六行数据
awk '!/mysql/' /etc/passwd                           # 匹配所有 不包含 "mysql"关键字的行
awk '/mysql|mail/{print}' /etc/passwd                # 匹配包含mysql 或者 mail的行
1
2
3
4
5
6
7

# 2.2 awk基本语法

tail -n3 /etc/services |awk -F'[ /]+' '{print $2}'    # 以"空格"或"斜线"分隔
awk -v a=123 'BEGIN{print a}'                         # 变量赋值
tail -n3 /etc/services |awk 'BEGIN{print "服务\t\t端口\t\t\t描述"}{print $0}END{print "===结束==="}' 
# BEGIN{} END{}结合使用
1
2
3
4

# 2.3 正则匹配

tail /etc/services |awk '/^blp5/{print $0}'          # 匹配开头是 blp5 的行
tail /etc/services |awk '/^[a-z0-9]{8} /{print $0}'  # 匹配第一个字段是 8 个字符的行
tail /etc/services |awk '/blp5/ && /tcp/{print $0}'  # 匹配记录中包含 blp5 或 tcp 的行
awk '! /^#|^$/' /etc/nginx/nginx.conf                # 不匹配开头是#和空行
tail /etc/services |awk '/^blp5/,/^com/'             # 匹配以 "blp5开头" 到 "com开头" 之间的所有行
1
2
3
4
5

# 2.4 NF

echo "a b c d e f" |awk '{print NF}'                    # 打印行数
echo "a b c d e f" |awk '{print $1}'                    # 打印第一行
echo "a b c d e f" |awk '{print $NF}'                   # 打印最后一行
echo "a b c d e f" |awk '{print $(NF-1)}'               # 打印倒数第二行
echo "a b c d e f" |awk '{$NF="";$(NF-1)="";print $0}'  # 排除最后两个字段
1
2
3
4
5

# 2.5 NR

tail -n5 /etc/services |awk '{print NR,$0}'             # 打印行号+内容
tail -n5 /etc/services |awk 'NR==3{print $2}'           # 打印第三行第二列的值
tail -n5 /etc/services |awk 'NR<=3{print NR,$0}'        # 打印前三行
1
2
3

# 2.6 操作符

'''数字 0,空字符串和未定义的值 '''
seq 3 |awk '{print $0*2}'                               # 乘法
seq 3 |awk '{print $0/2}'                               # 除法
seq 5 |awk '$0%2==0{print $0}'                          # 取余
seq 5 |shuf |awk '{print $0|"sort"}'                    # 先打乱再排序
1
2
3
4
5
上次更新: 2024/3/13 15:35:10
04.sed
nginx基础

← 04.sed nginx基础→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式