一、awk(报告生成器)
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一
这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识
awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,然后将结果展现给用户
二、awk的命令应用
在命令格式上分别体现如下 :
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令
END{}:处理完最后一行文本之后执行 , 一般用来输出处理
2.1 awk的基本用法1
(实验环境,我们在/mnt下面进行实验,将/etc/passwd里面的内容拷贝过来,留下一部分内容方便实验)
awk -F(指定分隔符) : ‘{print $1}’ passwd 打印passwd文件的以:为分隔符的第一列字符
awk -F :’{print $1$2}’ passwd 打印第一列和第二列,不会出现:分隔符
awk -F :’{print $2}’ passwd 打印第二列
awk -F : ‘BEGIN{print “linux”}{print $2}’ passwd 打印第二列,并且在最前面加上linux
awk -F : ‘BEGIN{n=1}{print $2,n}’ passwd 在第二列后面 均写上1
awk -F : ‘BEGIN{n=1}{print $2,n++}’ passwd打印第二列,并且编号
awk -F : ‘BEGIN{n=1}{print n++,$1}’ passwd将编号在前
awk -F : ‘BEGIN{n=1}{print n++,$1}END{print “over”}’ passwd在后面写上over
awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NR}’ passwd在结尾输出行数
awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NF}’ passwd在结尾输出列数
awk ‘/bash/{print}’ passwd 输出包含bash的行的第一个字符
awk -F : ‘/bash/{print $1}’ passwd只输出第一个字符
awk -F : ‘NR=3{print $1}’ passwd第三行的第一个
awk -F : ‘NR=3{print}’ passwd第三行
awk -F : ‘NR>=4&&NR<=6{print}’ passwd456行
awk -F : 'NR4||NR6{print}’ passwd4和6行
awk ‘{print FILENAME}’ passwd输出文件名字
awk ‘{print $0}’ passwd输出行
2.2 awk的基本用法2
awk ‘BEGIN{a=34;print a+12}’ 输出a+12的值
awk ‘/1/{print}’ /etc/passwd 输出以a到d开头的行
awk ‘!/[a-d]/{print}’ /etc/passwd 输出不是以a到d开头的所有的行
awk ‘/^r|bash$/{print}’ /etc/passwd 输出以r开头或者以bash结尾的行
awk ‘/^r/&&/bash$/{print}’ /etc/passwd
awk ‘/^r/||/bash$/{print}’ /etc/passwd
awk -F : ‘
6
/
b
i
n
6~/bin
6 /bin/{print}’ /etc/passwd 打印第六列以bin结尾的行
awk -F : ‘KaTeX parse error: Expected 'EOF', got '\<' at position 4: 6~/\̲<̲bin/{print}’ /etc/passwd
awk -F : ‘
6
!
/
b
i
n
6!~/bin
6! /bin/{print}’ /etc/passwd 第六列不是以bin结尾的行
a-d ↩︎