千家信息网

awk是什么?awk工作原理是什么?怎么用awk?

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,一、awk介绍1. awk概述awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其
千家信息网最后更新 2026年11月03日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能干啥?

  1. awk==用来处理文件和数据==的,是类unix下的一个工具,也是一种编程语言
  2. 可以用来==统计数据==,比如网站的访问量,访问的IP量等等
  3. 支持条件判断,支持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/nologin

2、内置变量分隔符举例

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

  1. awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束

  2. 每行被间隔符==:==(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始

    问:awk如何知道用空格来分隔字段的呢?

    答:因为有一个内部变量==FS==来确定字段分隔符。初始时,FS赋为空格

  3. awk使用print函数打印字段,打印出来的字段会以==空格分隔==,因为\$1,\$3之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为==输出字段分隔符==OFS,OFS默认为空格

  4. awk处理完一行后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕
字段 处理 变量 文件 语句 一行 命令 空格 分隔符 数据 脚本 文本 输入 输出 引号 模式 作者 内容 分号 制表符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 互联网科技公司税收优惠 科技信息互联网 腾讯阿里互联网科技 互联网 科技创新 西安互联网科技公司 沃里互联网科技 重庆科技学院互联网 金融科技和互联网金融 四个字互联网科技公司取名 温州喔噻互联网科技有限公司 中国的互联网科技企业的崛起 成都互联网科技公司100强 重庆威客帮互联网科技 成都铂石互联网科技做什么的 新兴科技互联网创新大赛颁奖典礼 烟台灵鸽互联网科技有限公司 美国互联网科技实力 每天都有哪些好的互联网科技 银行科技岗属于互联网吗 江苏根荣互联网科技 迪茉互联网科技 互联网科技大会 朱啸虎曾投资哪些互联网科技企业 伍佰万互联网科技怎么赚钱 工业互联网科技创业 长沙渺峰互联网科技有限公司 北京军民互联网科技公司 第三届互联网大会安防黑科技 武汉亿视互联网科技有限公司
0