awk是什么?awk工作原理是什么?怎么用awk?
admin
2023-02-22 02:00:04
0

一、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 filename

sed -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/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp: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/bash
bin             /sbin/nologin
daemon          /sbin/nologin
adm             /sbin/nologin
lp              /sbin/nologin
# awk -F: 'BEGIN{OFS="@@@"};/^root/,/^lp/{print $1,$NF}' 1.txt     
root@@@/bin/bash
bin@@@/sbin/nologin
daemon@@@/sbin/nologin
adm@@@/sbin/nologin
lp@@@/sbin/nologin
[root@server shell07]# 

RS和ORS:
修改源文件前2行增加制表符和内容:
vim 1.txt
root:x:0:0:root:/root:/bin/bash hello   world
bin: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中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕

相关内容

热门资讯

产能被冻、损失五百亿,阿联酋“... 阿联酋正式退出欧佩克,令这个成立了60多年、对全球油价都有着决定性影响的海湾核心组织公开决裂。欧佩克...
煤气灶火焰调什么颜色才最佳 良好的燃烧器,火焰呈浅蓝色,火力旺盛,火苗高度大小均匀一致。煤气灶火焰调节方式:1、将灶阀开到最大。...
柏特燃气灶中间没火怎么办 当我们使用柏特燃气灶时,出现中间没有火的情况可能是由多种原因引起的。以下是一些常见的原因和解决方法:...
火王燃气灶右边灶头打不着火 1、没有燃气。打不着火的情况大部分都是没有气了或者天然气管道堵塞所导致的,或者突发情况导致燃气公司关...
厨房橱柜开太快导致炉子熄火怎么... 1、使用燃气灶时,不要将燃气灶的门关的过紧导致气流不流通,从而间接导致炉子熄火的现象频发。2、在橱柜...
天然气火没关,把阀门关了 天然气火没关,把阀门关了如果只是一次这样做,不会造成安全问题,但最好将燃气灶具开关关闭,如果灶具使用...
金建希案主审法官坠亡,揭开韩国... ·申宗旿(中)在主持庭审。(韩联社)这一事件无疑已成为观察韩国司法独立现状的重要切片。作者:刘 潇当...
赖清德“偷渡式”窜访斯威士兰,... 台湾地区领导人赖清德此前因有关国家拒绝发放包机飞行许可,窜访斯威士兰受挫。5月2日,赖清德偷偷钻进斯...
28.5亿元建的高标准农田,“... 设备未安装、泵房被废弃、水渠不通水、农田灌溉难……鄱阳县部分高标准农田建设的问题正凸显出来。据澎湃新...
风声丨3万元即可入刑,史上最严... 作者丨胡敏洁浙江大学光华法学院教授、法律与社会政策研究中心主任长期以来,医药购销领域的腐败问题,始终...