shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句
条件语句 if(条件表达式)
动作1
else if(条件表达式)
动作2
else
动作3 循环语句:
while循环:
while(条件表达式)
动作 do while循环:
do
动作
while(条件表达式) for循环:
for(初始化计数器;计数器测试;计数器变更)
动作 、以:为分隔符,只打印/etc/passwd中第3个字段的数值在50-100范围内的行信息
# 简单运算符处理
awk 'BEGIN{FS=":"}{if($3>50 && $3<100) print $0}' passwd # if 条件处理
# 输出 以 UID 以50位为分界点的用户,-f 将条件表达式写到文本中读取
[root@localhost shell]# awk -f if.awk passwd
UID< root
UID< bin
UID< daemon
UID< adm
UID< lp
UID< sync
UID< shutdown
UID< halt
UID< mail
UID< operator
UID< games
UID< ftp
<UID< nobody
UID> systemd-network
<UID< dbus
UID> polkitd
<UID< sshd
<UID< postfix
UID> ajie
UID> chrony
UID> deploy
UID> nginx
[root@localhost shell]# cat if.awk
BEGIN{
FS=":"
}
{
if($<)
{
printf "%-20s%-20s%-10d\n","UID<50",$,$
}
else if ($> && $<)
{
printf "%-20s%-20s%-10d\n","50<UID<100",$,$
}
else
{
printf "%-20s%-20s%-10d\n","UID>100",$,$
}
} 、计算下列每个同学的平均分数,并且只打印平均分数大于90的同学姓名和分数信息
Allen
Mike
Zhang
Jerry
Han
Li # 算出平均成绩
[root@localhost shell]# awk 'BEGIN{printf "%-20s%-20s%-20s%-20s%-20s%-20s\n","Name","Chinese","English","Math","Physical","Average"}{sum=$2+$3+$4+$5;avg=sum/4}{printf "%-20s%-20d%-20d%-20d%-20d%-0.2f\n",$1,$2,$3,$4,$5,avg}' student.txt
Name Chinese English Math Physical Average
Allen 91.00
Mike 93.50
Zhang 83.25
Jerry 83.75
Han 86.25
Li 91.00
# 加入条件判断,如果平均分数大于90才打印
[root@localhost shell]# awk 'BEGIN{printf "%-20s%-20s%-20s%-20s%-20s%-20s\n","Name","Chinese","English","Math","Physical","Average"}{sum=$2+$3+$4+$5;avg=sum/4}{if(avg>90) printf "%-20s%-20d%-20d%-20d%-20d%-0.2f\n",$1,$2,$3,$4,$5,avg}' student.txt
Name Chinese English Math Physical Average
Allen 91.00
Mike 93.50
Li 91.00 、计算1++++...+100的和,请使用while、do while、for三种循环方式实现
通过读取文件的方式载入awk的条件 # while循环
[root@localhost shell]# cat add_while.awk
BEGIN{
while(i<=)
{
# 一个变量不赋值,默认为0或者空
sum+=i
i++
}
print sum
} # do while循环
[root@localhost shell]# awk -f add_dowhile.awk [root@localhost shell]# cat add_dowhile.awk
BEGIN{
do {
sum+=i
i++
}while(i<=)
print sum
} # for循环
[root@localhost shell]# awk -f add_for.awk [root@localhost shell]# cat add_for.awk
BEGIN{
for(i=;i<=;i++)
{
sum+=i
}
print sum
} # uid在50和100之间
[root@localhost shell]# awk 'BEGIN{FS=":"}{if($3>50 && $3<100) print $0}' passwd
# uid小于50或者大于100
[root@localhost shell]# awk 'BEGIN{FS=":"}{if($3<50 || $3>100) print $0}' passwd [root@localhost shell]# awk 'BEGIN{FS=":"}{if($3<50){printf "%-30s%-30s%-15d\n","小于50的UID",$1,$3} else if($3>50 && $3<100) {printf "%-30s%-30s%-15d\n","大于50并且小于100的UID",$1,$3} else {printf "%-30s%-30s%-15d\n","大于100的UID",$1,$3}}' passwd
小于50的UID root
小于50的UID bin
小于50的UID daemon
小于50的UID adm
小于50的UID lp
小于50的UID sync
小于50的UID shutdown
小于50的UID halt
小于50的UID mail
小于50的UID operator
小于50的UID games
小于50的UID ftp
大于50并且小于100的UID nobody
大于100的UID systemd-network
大于50并且小于100的UID dbus
大于100的UID polkitd
大于50并且小于100的UID sshd
大于50并且小于100的UID postfix
大于100的UID ajie
大于100的UID chrony
大于100的UID deploy
大于100的UID nginx # awk 通过-f参数读取文件的方式读取条件进行输出
[root@localhost shell]# cat scripts.awk
BEGIN{
FS=":"
} {
if($<)
{
printf "%-20s%-30s%-5d\n","UID<50",$,$
}
else if ($> && $<)
{
printf "%-20s%-30s%-5d\n","50<UID<100",$,$
}
else
{
printf "%-20s%-30s%-5d\n","UID>100",$,$
}
}
[root@localhost shell]# awk -f scripts.awk passwd
UID< root
UID< bin
UID< daemon
UID< adm
UID< lp
UID< sync
UID< shutdown
UID< halt
UID< mail
UID< operator
UID< games
UID< ftp
<UID< nobody
UID> systemd-network
<UID< dbus
UID> polkitd
<UID< sshd
<UID< postfix
UID> ajie
UID> chrony
UID> deploy
UID> nginx
[root@localhost shell]# 循环语句-do while do while
do
动作
while(条件表达式) 循环语句-for for
for(初始化计数器;测试计数器;计数器变更)
动作 # while循环
[root@localhost shell]# cat while.awk
BEGIN{
while(i<=)
{
sum+=i
i++
}
print sum
}
[root@localhost shell]# awk -f while.awk # for循环
[root@localhost shell]# cat for.awk
BEGIN{
for(i=;i<=;i++)
{
sum+=i
}
print sum
}
[root@localhost shell]# awk -f for.awk # do while循环
[root@localhost shell]# cat dowhile.awk
BEGIN{
do
{
sum+=i
i++
}while(i<=)
print sum
}
[root@localhost shell]# awk -f dowhile.awk [root@localhost shell]# cat student.txt
Name chinese english math physical average
Allen
Mike
Zhang
Jerry
Han
Li # 打印平均分大于90的人,并计算出各科总分
[root@localhost shell]# cat student.txt
Allen
Mike
Zhang
Jerry
Han
Li
[root@localhost shell]# cat student.awk
BEGIN{
printf "%-10s%-10s%-10s%-10s%-10s%-10s\n","Name","Chinese","English","Math","Physical","Average"
} {
total=$+$+$+$
avg=total/
if(avg>)
{
printf "%-10s%-10d%-10d%-10d%-10d%-0.2f\n",$,$,$,$,$,avg
# 将每一科的成绩累加起来保存在一个变量中
score_chinese+=$
score_english+=$
score_math+=$
score_physical=$
}
}
END{
printf "%-10s%-10d%-10d%-10d%-10d\n","Name",score_chinese,score_english,score_math,score_physical
}
[root@localhost shell]# awk -f student.awk student.txt
Name Chinese English Math Physical Average
Allen 91.00
Mike 93.50
Li 91.00
Name

shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句的更多相关文章

  1. shell编程系列17--文本处理三剑客之awk动作中的表达式用法

    shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...

  2. shell编程系列14--文本处理三剑客之awk的概述及常用方法总结

    shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ...

  3. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  4. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  5. shell编程系列19--文本处理三剑客之awk中的字符串函数

    shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...

  6. shell编程系列16--文本处理三剑客之awk模式匹配的两种方法

    shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...

  7. shell编程系列15--文本处理三剑客之awk格式化输出printf

    shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...

  8. shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容

    shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...

  9. shell编程系列13--文本处理三剑客之sed利用sed追加文件内容

    shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...

随机推荐

  1. gradle 构建scala程序

    一.build.gradle 二.gradle build ===================== 执行scala scala main.scala

  2. 1210 BBS admin后台管理及侧边栏筛选个人站点

    目录 昨日内容 django admin后台管理 使用 建表 用户图片的显示 MEDIA用户配置 查找照片 搭建个人站点 防盗链 新建css文件 侧边栏展示标签 定义分类栏与标签栏 定义时间栏 侧边栏 ...

  3. 《The One!团队》第八次作业:ALPHA冲刺(四)

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握软件测试基础技术.(2)学习迭代式增量软件开发过程(Scrum) 第四天 ...

  4. LG2662 牛场围栏 和 test20181107 数学题

    P2662 牛场围栏 题目背景 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后 ...

  5. 行为型模式(二) 命令模式(Command)

    一.动机(Motivate) 在我们的现实生活中有很多例子可以拿来说明这个模式,我们还拿吃饺子这个事情来说.我的奶奶说了,今天想吃饺子,发出了命令,然后我奶奶就去看电视去了.我们夫妻俩收到命令就开始和 ...

  6. 结构型模式(五) 外观模式(Facade)

    一.动机(Motivate) 在软件系统开发的过程中,当组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战. ...

  7. 写一个python小程序

    在windows环境下进行操作 window+R 输入cmd  创建一个文件夹 mkdir pytxt 创建一个py文件 py.py  用notepad或者记事本等工具进行编辑 或 首先声明pytho ...

  8. pwn第一周

    源码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> void setbufs() { set ...

  9. 014——C#新建文件夹

    (一)如果不存在路径就新建文件夹 string directory = @"C:\Users\Administrator\Desktop\温控数据\"; if (!Director ...

  10. (尚008)Vue条件渲染

    1.test008.html <!DOCTYPE html><html lang="en"><head> <meta charset=&q ...