awk是什么?awk工作原理是什么?怎么用awk?
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,一、awk介绍1. awk概述awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其
千家信息网最后更新 2025年12月02日awk是什么?awk工作原理是什么?怎么用awk?
一、awk介绍
1. awk概述
- awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。
- awk的处理文本和数据的方式:==逐行扫描==文件,默认从第一行到最后一行,寻找匹配的==特定模式==的行,并在这些行上进行你想要的操作。
- awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
- 下面介绍的awk是以GNU的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。
2. awk能干啥?
- awk==用来处理文件和数据==的,是类unix下的一个工具,也是一种编程语言
- 可以用来==统计数据==,比如网站的访问量,访问的IP量等等
- 支持条件判断,支持for和while循环
二、awk使用方式
1. ==命令行模式使用==
1)语法结构
awk 选项 '命令部分' 文件名特别说明:引用shell变量需用双引号引起2)常用选项介绍
- ==-F== 定义字段分割符号,默认的分隔符是==空格==
- -v 定义变量并赋值
3)=='==命名部分说明=='==
- 正则表达式,地址定位
'/root/{awk语句}' sed中: '/root/p''NR==1,NR==5{awk语句}' sed中: '1,5p''/^root/,/^ftp/{awk语句}' sed中:'/^root/,/^ftp/p'- {awk语句1==;==awk语句2==;==...}
'{print $0;print $1}' sed中:'p''NR==5{print $0}' sed中:'5p'注:awk命令语句间用分号间隔- BEGIN...END....
'BEGIN{awk语句};{处理中};END{awk语句}''BEGIN{awk语句};{处理中}''{处理中};END{awk语句}'2. 脚本模式使用
1)脚本编写
#!/bin/awk -f 定义魔法字符以下是awk引号里的命令清单,不要用引号保护命令,多个命令用分号间隔BEGIN{FS=":"}NR==1,NR==3{print $1"\t"$NF}...2)脚本执行
方法1:awk 选项 -f awk的脚本文件 要处理的文本文件awk -f awk.sh filenamesed -f sed.sh -i filename方法2:./awk的脚本文件(或者绝对路径) 要处理的文本文件./awk.sh filename./sed.sh filename三、 awk内部相关变量
| 变量 | 变量说明 | 备注 |
|---|---|---|
| ==$0== | 当前处理行的所有记录 | |
| ==\$1,\$2,\$3...\$n== | 文件中每行以==间隔符号==分割的不同字段 | awk -F: '{print \$1,\$3}' |
| ==NF== | 当前记录的字段数(列数) | awk -F: '{print NF}' |
| ==$NF== | 最后一列 | $(NF-1)表示倒数第二列 |
| ==FNR/NR== | 行号 | |
| ==FS== | 定义间隔符 | 'BEGIN{FS=":"};{print \$1,$3}' |
| ==OFS== | 定义输出字段分隔符,==默认空格== | 'BEGIN{OFS="\t"};print \$1,$3}' |
| RS | 输入记录分割符,默认换行 | 'BEGIN{RS="\t"};{print $0}' |
| ORS | 输出记录分割符,默认换行 | 'BEGIN{ORS="\n\n"};{print \$1,$3}' |
| FILENAME | 当前输入的文件名 |
1、==常用内置变量举例==
# awk -F: '{print $1,$(NF-1)}' 1.txt# awk -F: '{print $1,$(NF-1),$NF,NF}' 1.txt# awk '/root/{print $0}' 1.txt# awk '/root/' 1.txt# awk -F: '/root/{print $1,$NF}' 1.txt root /bin/bash# awk -F: '/root/{print $0}' 1.txt root:x:0:0:root:/root:/bin/bash# awk 'NR==1,NR==5' 1.txt # awk 'NR==1,NR==5{print $0}' 1.txt# awk 'NR==1,NR==5;/^root/{print $0}' 1.txt root:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin2、内置变量分隔符举例
FS和OFS:# awk 'BEGIN{FS=":"};/^root/,/^lp/{print $1,$NF}' 1.txt# awk -F: 'BEGIN{OFS="\t\t"};/^root/,/^lp/{print $1,$NF}' 1.txt root /bin/bashbin /sbin/nologindaemon /sbin/nologinadm /sbin/nologinlp /sbin/nologin# awk -F: 'BEGIN{OFS="@@@"};/^root/,/^lp/{print $1,$NF}' 1.txt root@@@/bin/bashbin@@@/sbin/nologindaemon@@@/sbin/nologinadm@@@/sbin/nologinlp@@@/sbin/nologin[root@server shell07]# RS和ORS:修改源文件前2行增加制表符和内容:vim 1.txtroot:x:0:0:root:/root:/bin/bash hello worldbin:x:1:1:bin:/bin:/sbin/nologin test1 test2# awk 'BEGIN{RS="\t"};{print $0}' 1.txt# awk 'BEGIN{ORS="\t"};{print $0}' 1.txt四、 awk工作原理
awk -F: '{print $1,$3}' /etc/passwd
awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束
每行被间隔符==:==(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始
问:awk如何知道用空格来分隔字段的呢?
答:因为有一个内部变量==FS==来确定字段分隔符。初始时,FS赋为空格
awk使用print函数打印字段,打印出来的字段会以==空格分隔==,因为\$1,\$3之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为==输出字段分隔符==OFS,OFS默认为空格
- awk处理完一行后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕
字段
处理
变量
文件
语句
一行
命令
空格
分隔符
数据
脚本
文本
输入
输出
引号
模式
作者
内容
分号
制表符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
郑州项目软件开发哪家专业
比赛连接任一服务器失败
浙江品牌网络技术咨询热线
网络技术具体做什么
北京风河软件开发
操作系统服务器怎么打开
网络安全秘诀
软件开发打包是什么意思
检索图书信息的数据库
服务器被测压
黑芒君服务器怎么被炸了
网络技术标准包括哪些
华艺网络技术有限公司怎么样
软件开发费用评估师
网络技术支撑有前途吗
软件开发与制造是学什么的
常用的软件开发
网络安全教育工作要点
浙江大数据网络技术服务机构
为什么360网络安全防护
服务器查看cpu型号命令
朔州兼职 软件开发
工业实时数据库 开源
mt4软件开发难度
2021年研究生网络安全调剂
互联网软件开发赚钱吗
泉州市盛宇网络技术有限公司
李艇网络安全与认证
江岸软件开发电话
互联网行业软件开发外包