awk
Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本
以空格作为分割符,多个空格他会自动压缩成一个空格
AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理.
1按照命令找指定的行 2.找到的行 打印,操作
awk 默认的方式就是打印 把结果给你输出到屏幕上
可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。
命令结构
awk ‘< pattern> <acion>’ <iuput-file> #只能那个用单引号引起来
操作符 怎么干 处理对象
awk 的工作过程
1先看BEGIN{action)这个模块是读取操作,读文件的所有行,所有读取完毕,然后一次执行
2.END{bction)打印。输出结果,对前面的结果,条件判断,还可以用代码接着操作
awk的工作流程就是对行进行处理 然后区列
工作原理
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理
目录
awk的基本格式及其内置变量
awk 选项 '模式或条件 {操作}' 文件1 文件2.
-F :| 加上指定分隔符
-v 变量赋值
注意一定是单引号:'模式或条件 {操作}
{ }外指定条件,{ }内指定操作。
内置变量
不能用双引号括起来,不然系统会把它当成字符串
内置变量
$0 | 当前处理的行的整行内容 打印所有 |
$n | 当前处理行的第n个字段(第n列) |
NR | 当前处理的行的行号(序数) |
NF | 当前处理的行的字段个数。$NF代表最后一个字段 |
FS | 列分割符。指定每行文本的字段分隔符,输入内容的分隔符, |
命令行操作
这是aed ' ' 打印的方式
这是awk ‘{print}’ 打应的方式
awk ‘1{peint}’ 2.txt 这两个是一个意思 加1和不加一
awk '{peint}' 2.txt
$0 是全部打印
awk '{print $0}' 2.txt
先看这张图就好理解了 对没行的列进行处理 也就是切片
$0 是打印所有内容 后面加上2 3 4 就是打印他的列数
实战演练对 /etc/passwd 提取第1列和第4列
既有行号也有内容
awk '{print NE,$0}' /etc/passwd
awk 'NR==3{print}' 3.txt 指定打印出第三行的内容
awk 'NR==3,NR==5{print}' test1.txt ----打印3-5行的内容
这边要主要下冒号 逗号不要搞混 了
awk 'NR==3,NR==5{print}' 3.txt ----打印3 4 5行的内容
awk 'NR==3;NR==5{print}' 3.txt ----打印第3行和第5行
awk '(NR>=3)&&(NR<=5){print}' test1.txt -----正则的表达方式,打印3-5行的内容
奇偶行打印
awk 'NR%2==0{print}' test1.txt #打印偶数行
awk 'NR%2==1{print}' test1.txt #打印奇数行
awk运算:
getline
getline的工作过程
1、当getline左右无重定向符号(“<”,">")或者管道符号(“|”)时,
打印偶数行
awk '{getline;print $0}' test1.txt #相当于打印了偶数行
getline作用
getline没有重定向 没有管道符就是打印奇偶行
awk '{print $0;getline}' test1.txt #相当于打印了奇数行
2、当getline左右有管道符号或重定向符时
作用:就是从指定文件获取内容>输出到新的文件里 $0代表全量 也就是全部的意思
awk '{getline < "1.txt"; print $0 > "ky30.txt";}' 3.txt #使用重定向把1.txt输出给ky30
第一个:getline是awk的一个内置函数
第二个:没有重定向和管道符,就是奇偶行
第三个: 重定向,就从指定文件获取内容,|,赋值变量