栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

17.文本处理工具awk

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

17.文本处理工具awk

 个人简介
 作者简介:大家好,我是小鹏linux,运维领域新星创作者。
 个人主页:小鹏linux
 支持我:点赞+收藏⭐️+留言
格言:你未必出类拔萃,但一定与众不同!
 系列专栏:
                阶段一:windows基础                        目前原创16篇
                阶段二:Linux基础知识                      目前原创38篇
                阶段三:shell基础+shell高级              目前原创17篇
                阶段四:python基础及自动化应用      原创未开始
                阶段五:Linux网络服务                       原创未开始
                阶段六:集群原理及架构                     原创未开始
                阶段七:云计算虚拟化技术                 原创未开始

目录

1.awk的条件 

2.awk动作: 

3.awk内置变量 

4.awk中调用脚本


awk是基于列的文本处理工具,awk认为文件都是结构化的,也就是说都是由单词和各种空白字符组成的,这里的“空白字符”包括空格、TAB以及连续的空格和TAB等。每个非空白的部分叫做“域”从左到右依次是第一个域第二个域等。$1、$2分别用于表示域,$0则表示全部域。

awk基本使用 

printf:可以自定义输出的模式,另外输出内容之后不自动换行,print:输出内容之后自动换行。print 中不能使用%s ,%d 或%c。

awk使用格式:awk ‘条件1{动作1} 条件2{动作2}....’ 文件名

1.awk的条件 

(1)awk的保留字:

BEGIN:awk的保留字,是一种特殊的文件类型。BEGIN的执行时机是“在awk程序一开始时,尚未读取任何数据之前执 行。”一旦BEGIN后的动作执行一次,当awk开始从文件中读入数据,BEGIN的条件就不再成立,所以BEGIN定义的动作 只能被执行一次。

[root@localhost ~]# awk 'BEGIN {printf "This is a cj n"} {printf $2 "t" $4 "n"}' cj.txt

#添加BEGIN,让this is a cj在程序开始时执行

END:也是awk的保留字,不过刚好和BEGIN相反。END是在awk程序处理完所有数据,即将结束时执行。END后的动作 只在程序结束时执行一次。

[root@localhost ~]# awk 'END {printf "The END n"} {printf $2 "t" $4 "n"}' cj.txt

#在输出结尾输出“the end”这并不是文档本身的内容,而且只会执行一次。

(2)正则表达式: 

 ※正则表达式:

如果想要让awk识别字符串,必须使用//包含

[root@localhost ~]# awk '/wangwu/ {print}' cj.txt

#打印wangwu的成绩

[root@localhost ~]# df -h | awk '/sda[0-9]/ {printf $1 "t" $5 "n"}'

#查询包含有sda数字的行,并打印第一字段和第五字段

(3)关系运算符:关系运算符如果查找字符的话,要加双引号。

条件

说明

>

大于

<

小于

>=

大于等于

<=

小于等于

==

等于。用于判断两个值是否相等,如果是变量赋值请使用“=”号

!=

不等于

~

判断字符串A中是否包含能匹配B表达式的字符串

!~

判断字符串A中 是否不包含能匹配B表达式的字符串

关系运算符:

[root@localhost ~]# cat cj.txt | grep -v Name | awk '$4 >= 89 {printf $2 "n"}'

#查找成绩大89分的学员

虽然awk是列提取命令,但是也要按行来读入的

[root@localhost ~]# awk '$2~ /lisi/ {printf $4 "n"}' cj.txt

#截取第二列中lisi字符串所在的那一行中第四列的内容

2.awk动作: 

printf格式化输出:

格式:printf ‘输出类型输出格式’ 输出内容

输出类型:

%ns:输出字符串。n是数字指左对齐的情况下格式宽度“%-ns表示左对齐”。

%ni:输出整数。n是数字指右对齐的情况下格式宽度“%-ni表示左对齐”。

%m.nf:输出浮点数。m和n是数字,指代输出的整数位和小数位。但整数位并不会受限。

输出格式:输出格式要加双引号

n       #换行。

t       #水平输出退格键,也就是tab键。

[root@localhost ~]# printf '%st%st%st%stn' $(cat ./cj.txt)

#用printf输出合理的格式

[root@localhost ~]# printf '%it%st%st%8.2ftn' $(cat cj.txt | grep -v Name)

#按照整数和浮点型输出

流程控制语句

[root@localhost ~]# awk 'NR==2{cj1=$4}

> NR==3{cj2=$4}

> NR==4{cj3=$4;totle=cj1+cj2+cj3;print "totle cj is" totle}' cj.txt

totle cj is266.366

#统计本次成绩的总分

[root@localhost ~]# awk '{if (NR>=2) {if ($4>=90) print $2 " is a good boy n"}}' cj.txt

lisi is a good boy

#假设如果成绩大于90,就是goodboy

[root@localhost ~]# awk '{printf $2 "t" $3 "n"}' cj.txt

#awk后的的格式要加单引号

#列出第二列和第六列

[root@localhost ~]# df -h | awk '{printf "%-30s %-30sn",$1,$5}'

#截取后列的格式的左右对齐,“-”是左对齐

[root@localhost ~]# awk -F ":" '{printf "%-10sn",$1}' /etc/passwd

#使用10个宽度,左对齐显示

[root@xuegod63 ~]# awk -F ":" '{printf "%10sn",$1}' /etc/passwd

#使用10个宽度,右对齐显示

[root@xuegod63 ~]# awk -F: '{printf "USERNAME: %-15s %15sn",$1,$NF}'

/etc/passwd

#第1列使用15个字符宽度左对齐输出,最后一列($NF)使用15个字符宽度右对齐输出

3.awk内置变量 

awk 内置变量

作用

$0

代表 awk 读入当前行的整行数据

$n

代表 awk 读入当前行的第 n 列数据

NR

代表当前 awk 正在处理的行的行号

NF

代表当前 awk 读取数据总字段数(总列数)

FS

用来声明 awk 的分隔符,如 BEGIN {FS=“:”}

[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"} {printf $1 "t" $3 "n"}'

#以:为分隔符把第一列和第三列截取出来

[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "t" $3"t" NR "t"NF"n"}'

#分隔符是“:” 输出第一字段和第三字段 输出行号(NR) 字段数(NF)

[root@localhost ~]# cat /etc/passwd | awk 'BEGIN {FS=":"} $1=="sshd" {printf $1 "t" $3 "t" NR "t" NF "n"}'

#分隔符是“:” 输出第一字段和第三字段 输出行号(NR) 字段数(NF)且果只想查看sshd这个伪用户

4.awk中调用脚本
[root@localhost ~]# cat pass.awk

BEGIN {FS=":"}

{print$1"t"$3}

[root@localhost ~]# awk -f pass.awk /etc/passwd

#用-f选项来调用这个脚本。

喜欢的请来个三连支持一下吧,谢谢谢谢!!!

您的支持是我最大的动力!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号