Linux awk命令 介绍与学习心得

本文详细介绍了Linux中的awk命令,包括其基本概念、处理过程、完整语法、基本语法、操作符、内置变量、引用shell变量的方法、数字求和及部分内置函数的使用。awk作为文本处理工具,能实现模式匹配、数据分段和流控制等功能,是Linux系统管理员和开发者的重要工具。通过实例展示了awk在处理文件数据时的灵活性和强大性。
摘要由CSDN通过智能技术生成

一.awk是什么?

awk 是一门模式扫描和处理的语言—》专门使用awk进行文本的截取的工具

gawk - pattern scanning and processing language

在我看来,awk也是一门独立的语言,它既可以支持正则也可以支持流控(if…else)。它属于文本处理三剑客之一。(grep、sed、awk)

二.awk命令的简要处理过程

  1. 存在一个文件 使用awk命令打开之后
  2. awk逐行读取文件数据进行处理
  3. Awk 默认以空白为分隔符 将文件的每一行都进行分段处理
  4. 储存数据从$1 到 $?,$0为整行。

在这里插入图片描述

三. awk的完整语法

awk ‘BEGIN{commands}pattern{commands}END{commands}’ filename
在这里插入图片描述
在这里插入图片描述

例如:

[root@firewall ~]# awk -F: 'BEGIN{print "####start####"}/bash/{print $1,$3} END{print "####end####"}' /etc/passwd
####start####
root 0
sanchuang 1000
cali 1001
####end####

四.awk命令的基本语法

awk -F 分隔符 ‘/模式/{动作}’ 输入文件
在这里插入图片描述
^ 放在 [ ]外面 就是开头
放在 [ ]里面就是取反
例子:

[root@firewall ~]# cat /etc/passwd|awk -F: '/^[abc]/{print $1,$3}'
bin 1
adm 3
chrony 998
cali 1001

[root@firewall ~]# cat /etc/passwd|awk -F: '/^[^abc]/{print $1,$3}'
root 0
daemon 2
lp 4
sync 5
shutdown 6
.......

五.awk的命令操作符

在这里插入图片描述
例子:
精确匹配:

[root@firewall ~]# cat /etc/passwd|awk -F: '$3==0{print $1,$3}'
root 0

模糊匹配:

[root@firewall ~]# cat /etc/passwd|awk -F: '$1 ~ /x/{print $1,$3}'
postfix 89
nginx 996

单词的界定符:
awk和grep:

  1. <feng 单词以feng开头
  2. feng> 单词以feng结尾
  3. <feng> 就是一个单词feng

grep:

  1. \b feng 单词以feng开头
  2. feng\b 单词以feng结尾
  3. \b feng \b 就是一个单词feng

六.awk的内置变量

  • FS (field separater 分隔符)
  • OFS (output field separate 输出分隔符)
  • NR (number of row)
  • NF (number of field)

例子:

 [root@firewall ~]# awk -F: '{print $1,NR}' /etc/passwd
root 1
bin 2
....
[root@firewall ~]# awk -F: '{print $1,NR,$NF,NF}' /etc/passwd
root 1 /bin/bash 7
bin 2 /sbin/nologin 7

七.awk如何引用shell变量

1.管道| + awk -v 重新赋值一个变量

例子:

[root@firewall ~]#name=xyy
[root@firewall ~]# echo | awk -v new_name=$name '{print new_name}'
xyy

2.使用双引号和$符号直接引用

例子:

[root@firewall lianxi]# sg=xyy
[root@firewall lianxi]# awk -F: "/^$sg/{print \$0}" /etc/passwd
xyy:x:1003:1004::/home/xyy:/bin/bash

注意:花括号{}里的$符号需要用反斜杠\转义

八.数字求和

[root@firewall ~]# cat a.txt 
1
2
3
4
5
6
7
8
9
10
[root@firewall ~]# awk  'BEGIN{i=0} { i=i+$0}END{print i}' a.txt
55

九.awk命令的部分函数

length()

显示用户名长度在5到10之间的用户,并且使用shell为bash,uid大于500.

[root@firewall ~]# cat /etc/passwd|awk -F: 'length($1)>=5&&length($1)<=10&&$NF~/bash/&&$3>500{print $1}'
sanchuang
sc_xyy

流程控制:
在这里插入图片描述

[root@firewall ~]# awk -F: '{if($3>500)print $1,$3;else print $0}' /etc/passwd

数组用法:

[root@firewall ~]# cat /etc/passwd | awk -F: '{a[$3]=$1}END{for (i in a)print a[i];print length(a)}'
rr
lp
....
adm
30


感谢各位看官!!!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值