09文本处理工具-awk

awk是一个功能强大的文本分析工具,它逐行读取文件并按空格分隔处理内容。文章介绍了awk的基本用法,包括指定分隔符、模式匹配和动作执行。通过实例展示了如何搜索特定行、提取列以及使用内置变量进行复杂操作,如统计行号和列数,甚至修改数据。文章还提到了awk的BEGIN和END规则,以及如何利用内置变量如FILENAME、NR和NF进行更精细的数据操作。
摘要由CSDN通过智能技术生成

awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开 的部分再进行分析处理

1、基本用法

awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

选项参数    功能
-F         指定输入文件分隔符
-v         赋值一个用户定义变量

2、案例

(1)数据准备

[niujifei@njf ~]$ cp /etc/passwd ./
passwd 数据的含义
用户名:密码(加密过后的):用户 id:组 id:注释:用户家目录:shell 解析器

(2)搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 7 列。

[niujifei@njf ~]$ awk -F : '/^root/{print $7}' passwd
/bin/bash

(3)搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列, 中间以“,”号分割

[niujifei@njf ~]$ awk -F : '/^root/{print $1","$7}' passwd
root,/bin/bash

注意:只有匹配了 pattern 的行才会执行 action。

(4)只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名 user,shell 在最后一行添加"dahaige,/bin/zuishuai"。

[niujifei@njf ~]$ awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

(5)将 passwd 文件中的用户 id 增加数值 1 并输出

[niujifei@njf ~]$ awk -v i=1 -F : '{print $3+i}' passwd

3、awk 的内置变量

变量          说明
FILENAME     文件名
NR           已读的记录数(行号)
NF           浏览记录的域的个数(切割后,列的个数)

4、案例

(1)统计 passwd 文件名,每行的行号,每行的列数

[niujifei@njf ~]$ awk -F : '{print "filename:" FILENAME ",linenum:"NR ",col:"NF}' passwd

(2)查询 ifconfig 命令输出结果中的空行所在的行号

[niujifei@njf ~]$ ifconfig | awk '/^$/{print NR}'

(3)切割 IP

[niujifei@njf ~]$ clear
[niujifei@njf ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.30.13.142  netmask 255.255.240.0  broadcast 172.30.15.255
        ether 00:16:3e:03:bf:3d  txqueuelen 1000  (Ethernet)
        RX packets 35646892  bytes 6916823332 (6.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32636748  bytes 16849519680 (15.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[niujifei@njf ~]$ ifconfig eth0 | awk '/netmask/ {print $2}'
172.30.13.142
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值