3天玩转shell--7.awk编程技巧一

简介: 本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。

一、这节课掌握如下几个知识点

【1】掌握awk的字符分隔
【2】掌握awk字符匹配的用法
【3】掌握awk流程控制的if判断
【4】掌握awk编程的循环for、while

二、代码讲解

先根据附件中的文档创建7.example.txt的测试文件。
#!/bin/bash
#7.sh v1
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
export LANG=zh_CN.UTF-8
export PATH

#1.文件中某一列的字符提取及字符切割
#$0-$NF 从第一列到最后一列
sed -n '1,3p' 7.example.txt    #用sed将文件中的13行过滤出来
echo "--------------"
sed -n '1,3p' 7.example.txt|awk '{print}'  #用sed将文件中的13行过滤出来并通过awk全部打印
echo "--------------"
sed -n '1,3p' 7.example.txt|awk '{print $0}' #用sed将文件中的13行过滤出来打印第1echo "--------------"
sed -n '1,3p' 7.example.txt|awk '{print $1}'#用sed将文件中的13行过滤出来打印第2echo "--------------"
sed -n '1,3p' 7.example.txt|awk '{print $2}' #用sed将文件中的13行过滤出来打印第3echo "--------------"
sed -n '1,3p' 7.example.txt|awk '{print $NF}'#用sed将文件中的13行过滤出来打印最后一列
echo "=================-F 切割参数"
awk -F '[ :]' 表示既可以是空格,也可以是冒号进行分隔
sed -n '5,7p' 7.example.txt  #用sed将文件中的57行过滤出来
echo "--------------"
sed -n '5,7p' 7.example.txt|awk -F "," '{print $2}' #用sed将文件中的57行过滤出来并进行逗号切割后,打印第二列
echo "--------------NR 表示输入的行数"
sed -n '9,11p' 7.example.txt|awk -F ",|;" '{print $2}'#用sed将文件中的911行过滤出来并进行逗号,竖线,分号切割后,打印第二列
echo "--------------"
sed -n '9,11p' 7.example.txt|awk '{print NR}' #用sed将文件中的911行过滤出来并用awk输出行号

#2.字符串匹配
echo "=================="
sed -n '13,17p' 7.example.txt  #用sed将文件中的1317行过滤出来
echo "--------------"
sed -n '13,17p' 7.example.txt|awk '/yidong2/' #用sed将文件中的1317行过滤出来,并将匹配yidong2的行打印出来
echo "--------------"
sed -n '13,17p' 7.example.txt|awk '/yidong2/{print $2}' #用sed将文件中的1317行过滤出来,并将匹配yidong2的行打印第二列
echo "--------------"
sed -n '13,17p' 7.example.txt|awk '$1 ~ /10010/{print $2}' #用sed将文件中的1317行过滤出来,并将第一列匹配到10010的行打印第二列
echo "--------------"
sed -n '13,17p' 7.example.txt|awk '$1 ~ /\<10010\>/{print $2}' #用sed将文件中的1317行过滤出来,并将第一列绝对匹配10010的行打印第二列
echo "--------------"
sed -n '13,17p' 7.example.txt|awk '$1 ~ /10010/ && $NF ~ /liantong2/{print $2}' 
 #用sed将文件中的13到17行过滤出来,并将第一列匹配10010,和最后一列匹配liantong2的第二列打印出来

#3.awk中使用if判断
echo "=================="
sed -n '1,3p' 7.example.txt
echo "--------------"
sed -n '1,3p' 7.example.txt|awk '$2>=30{print}'   #用sed将文件中的13行过滤出来,并将第二列大于等于30的行打印出来。
echo "--------------"
sed -n '1,3p' 7.example.txt|awk '$2>=30{print $1,$2}'  #用sed将文件中的13行过滤出来,并将第二列大于等于30的行,然后将第一列、第二列打印出来。
echo "--------------"
sed -n '1,3p' 7.example.txt|awk '($2>=30)&&($1~/wang/){print $3}' #用sed将文件中的13行过滤出来,并将第二列大于等于30的行,并且第一列匹配wang的行匹配出来并打印第三列
echo "--------------"
sed -n '19,22p' 7.example.txt
echo "--------------"
sed -n '19,22p' 7.example.txt|awk '{if (NR%2==0){print $0} else {printf "%s ",$0}}'   #用sed将文件中的1922行过滤出来,并将偶数列和奇数列分别打印不同的信息
echo "--------------"
sed -n '24,27p' 7.example.txt|awk '{ if(NR==2){print $0/4} else if(NR==4){print $0/3} else {print} }'  #用sed将文件中的2427行过滤出来,并将第二行的第一列除4,第四行的第一列除3,其余的全部打印。

#4.awk中使用循环for,while
echo 5 6 7 8|awk '{ for (i=1;i<=NF;i++) { if ($i>6) {print $i} } }'  #循环判断5678,并打印大于6的值
echo 5 6 7 8|awk '{for (i=1;i<=NF;i++) { sum+=$i }; {print sum} }'  #将5678求和
sed -n '24,27p' 7.example.txt|awk '{N+=$1} END {print N/NR}'  #用sed将文件中的2427行过滤出来,并求第一列数据的平均数
sed -n '24,27p' 7.example.txt|awk 'BEGIN {max = 0} {if ($1+0 > max+0) max=$1 fi} END {print max}'  #用sed将文件中的2427行过滤出来,并求第一列的最大值
#awk默认按照字符串比较的,如果要比较数值,需要先强制类型转换,即 $1+0,转换成整数。
sed -n '24,27p' 7.example.txt|awk 'BEGIN {min = 65535} {if ($1+0 < min+0) min=$1 fi} END {print min}' #用sed将文件中的2427行过滤出来,#求最小值
awk 'BEGIN{ test=100; total=0; while(i<=test) { total+=i;  i++; } print total; }' #求1-100的累加
awk 'BEGIN{ total=0; i=0; do { total+=i;  i++; }while(i<=100) print total; }'  #求1-100的累加
AI 代码解读

三、课程附件

附件1:7.example.txt

xiaoming 23 1500
xiaodong 32 2300
xiaowang 43 3200
===========
xiaoming,23,1500
xiaodong,32,2300
xiaowang,43,3200
===========
xiaowang,43;3200
xiaowang;43,3200
xiaowang,43,3200
=========ƥӡ=
10086 cmc yidong
100860 ccc yidong2
10010 cnc liantong
100101 ccc liantong2
10000 ctc dianxing
==========if һ=
192.168.1.17
down
192.168.1.103
open
=======if-else===
125
32
126
54
==========
cc 750
aa 181
bb 37
bb 725
aa 42
cc 72
=====BEGIN END====
one:16.32
two:13.28
three:15.65
AI 代码解读
目录
打赏
0
0
0
0
4
分享
相关文章
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
441 0
Linux Shell 进阶:探索高级命令和脚本编程技巧
Linux Shell不仅仅是一个命令解释器,它还提供了许多强大的高级命令和脚本编程技巧,能够帮助用户更高效地管理系统和处理数据。在这篇文章中,我们将深入探讨Linux Shell的高级功能。
446 0
3天玩转shell--10.shell编程技巧汇总
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
208 0
3天玩转shell--8.awk编程技巧二
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
217 0
|
2月前
|
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
63 17
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
154 3
|
2月前
|
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
62 4
|
3月前
|
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
169 25
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等