欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 文本三剑客--awk篇章

文本三剑客--awk篇章

2024/10/24 6:25:11 来源:https://blog.csdn.net/qq_52448810/article/details/139931257  浏览:    关键词:文本三剑客--awk篇章

文本三剑客–awk篇章

grep 过滤 查
sed 增删改查 增和改
awk 按行取列

重点
awk 按行取列
awk的精确删选
awk的运算符

awk默认分隔符,空格 ,tab键,多个空格自动压缩成一个。
awk 工作原理:根据指定信息逐行读取文本内容,然后按照条件进行格式化输出。

awk选项:
-F 指定分隔符 默认空格
-v 用于变量赋值
内置变量:
$#:按行需要取出的第几个字段。
$0:打印所有,展示所有的文本内容(默认)
NR:需要处理的行号
NF:处理行的字段个数 $NF:当前行的最后一个字段
FS:FS和F是一样的,都是指定分隔符,-F: FS=“:”
OFS:指定输出内容的分隔符。
RS:行分隔符,可以根据RS的设置把文件内容切割成多个记录,也可以改变行的分隔符,默认是\n,回车,换行

awk ‘{print}’ awk.txt 打印awk.txt的全部内容
awk -F “操作符 {动作}” 处理对象
-F 指定分隔符,如果是空格可以不加
动作:默认是打印。

在这里插入图片描述

[root@test3 opt]# #打印行号
[root@test3 opt]# awk '{print NR}'  awk.txt
[root@test3 opt]# awk '{print NR,$0}'  awk.txt   #既打印行号也打印行的内容[root@test3 opt]# #打印指定的行
[root@test3 opt]# awk 'NR==3{print}' awk.txt     #打印第三行
[root@test3 opt]# awk 'NR==3,NR==5{print}' awk.txt   #打印第三行到第五行
[root@test3 opt]# awk 'NR==3;NR==5{print}' awk.txt   #打印第三行和第五行[root@test3 opt]# #打印奇偶行
[root@test3 opt]# awk 'NR%2==0{print}' awk.txt    #打印偶数行
[root@test3 opt]# awk 'NR%2==1{print}' awk.txt    #打印奇数行[root@test3 opt]# #指定分隔符
[root@test3 opt]# awk -F: 'NR==1,NR==3{print$3}' /etc/passwd  #打印前三行的第三个字段[root@test3 opt]# #awk怎么使用文本过滤
[root@test3 opt]# awk '/root/{print}' /etc/passwd     打印带有root的行
root:x:0:0:root:/root:/bin/bash                  
operator:x:11:0:operator:/root:/sbin/nologin
[root@test3 opt]# awk '/^root/{print}' /etc/passwd         打印root开头的行
root:x:0:0:root:/root:/bin/bash
[root@test3 opt]# awk '/bash$/{print}' /etc/passwd      打印bash结尾的行[root@test3 opt]# #awk 'BEGIN{...};{...};END{...}'  文件
[root@test3 opt]# #BEGIN{...} 预先的条件,执行awk命令前的初始化操作
[root@test3 opt]# #第二个{...}处理条件,如何对初始值进行操作
[root@test3 opt]# #END{...}出完玩之后的操作,一般都是打印[root@test3 opt]# awk 'BEGIN{x=0};{x++};END{print x}' awk.txt   #打印行数[root@test3 opt]# #取幂运算
[root@test3 opt]# awk 'BEGIN{print 2^3}' awk.txt                #计算幂root@test3 opt]# # -v  变量赋值read -p "请输入一个数:" a
read -p "输入幂数:" b
num=$(awk -v a=$a -v b=$b 'BEGIN{print a**b}')
echo $num[root@test3 opt]# #-v 进行赋值
[root@test3 opt]# awk -v FS=":" -v  OFS"==" '{print $1,$3}' /etc/passwd   #将分隔符从:变成==
[root@test3 opt]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@test3 opt]# echo $PATH | awk -v RS=":" '{print $1}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin[root@test3 opt]# #使用awk进行条件判断进行打印
[root@test3 opt]# awk -F: '$3>900{print $0}' /etc/passwd
[root@test3 opt]# awk -F: '!($3>999){print $0}' /etc/passwd

面试:

awk的三元表达式:

[root@test3 opt]# awk -F: '{num=($3>$4)?$3:$4;{print num,$0}}' /etc/passwdnum=($3>$4)?$3:$4;
if
else语句         
?  if
: else
; if
else 
echo $3
else
echo $4

笔试

[root@test3 opt]# cat host.txt 
1 www.kkk.com
2 mail.kkk.com
3 ftp.kkk.com
4 linux.kkk.com
5 blog.kkk.com
[root@test3 opt]# cat host.txt | awk -F. '{print$1}' | awk '{print$2}'  
www
mail
ftp
linux
blog

awk的精确筛选:

$n(> < ) 用于比较数值
$n~“字符串”:该字段包含某个字符串
$n!~“字符串”:该字段不包含某个字符串
$n
"字符串":该字段等于这个字符串
$n!=“字符串”:该字段不等于这个字符串
$NF"字符串":代表最后一个字段

[root@test3 opt]# awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd
#打印第七列包含bash这个字段的行,取的是行的第一列和最后一列,以:作为分隔符号
[root@test3 opt]# awk -F: '$7~"bash" {print $1,$2,$3}' /etc/passwd #第一到第三列
[root@test3 opt]# awk -F: '$7!="bash" {print $1,$2}' /etc/passwd逻辑且
[root@test3 opt]# #/etc/passwd 第一列=fu且第七列=/bin/bash
[root@test3 opt]# awk -F: '($1=="fu")&&($NF=="/bin/bash") {print $1,$NF}' /etc/passwd逻辑或
[root@test3 opt]# #/etc/passwd 第一列=fu或第七列=/bin/bash
[root@test3 opt]# awk -F: '($1=="fu")||($NF=="/bin/bash") {print $1,$NF}' /etc/passwd

curl是一个功能强大的命令
主要作用:获取和发送数据
curl 域名/ip地址 获取网页内容并且输出
-O 下载文件到本地
-o 指定文件下载路径
-x 发送post请求
-i 获取web软件的版本(服务端没有隐藏版本号)

[root@test3 opt]# #awk取小数点几位以及小数运算怎么取整数
[root@test3 opt]# num=$(awk 'BEGIN{printf "%.F",1.33+1.236}')  #只取整数,四舍五入
[root@test3 opt]# echo $num 
3[root@test3 opt]# num=$(awk 'BEGIN{printf "%.2f",1.33+1.236}')   #取小数点后两位,四舍五入
[root@test3 opt]# echo $num 
2.57
[root@test3 opt]# #统计/etc下文件的总大小?awk实现
[root@test3 opt]# ll /etc/ | awk '/^-/{print sum+=$5} END {print "文件总大小" sum/1024"M"}'
#今天的作业,监控内存,cpu和硬盘的根目录,超过80%提示用户,写成函数库的行,每天早上 的8.50分,执行一次脚本。
1、硬盘超过80%
df -h | awk 'NR==2{print$5}'[root@test3 opt]# df -h | awk 'NR==2{print$5}'
27%2、cpu 
top -bn 1 | awk 'NR==3{print}' | awk -F,  '{print $2+$3}'3、内存free -m | awk 'NR==2{print}' | awk '{print$2,$3}'free -m | awk 'NR==2{print}' | awk '{print$3/$2}'

27%

2、cpu
top -bn 1 | awk ‘NR==3{print}’ | awk -F, ‘{print $2+$3}’

3、内存
free -m | awk ‘NR==2{print}’ | awk ‘{print$2,$3}’

free -m | awk ‘NR==2{print}’ | awk ‘{print$3/$2}’


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com