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. 矩阵迹 tr(AB)=tr(BA)的证明

    其实更为直观的理解是:AB与BA具有相同的对角线元素,因此tr(AB)=tr(BA)必然成立 ref:https://blog.csdn.net/silence1214/article/details ...

  2. 3.XPath

    使用XPath可以在不遍历xml文档的情况下选择具体节点. 转自https://www.cnblogs.com/vaevvaev/p/6928201.html XPath可以快速定位到Xml中的节点或 ...

  3. [转] ubuntu16.04添加系统 service, 并设置开机自动启动

    转:https://www.jianshu.com/p/1958878646bd 1. 创建pfly.service文件 2.  执行 systemctl daemon-reload 3. 执行 sy ...

  4. P1341 无序字母对[欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 解析 毒瘤字符串读入 我就是不喜欢邻接 ...

  5. md5 32位小写加密源码

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * md5 32位小写加密 ...

  6. python3.8新特性

    海象运算符(赋值运算符) #原来 def choice(): s = ' jsadlk '.strip() res = isinstance(s, int) if res: return 'int' ...

  7. Django之路——7 django与ajax

    Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数 ...

  8. 《少年先疯队》第九次团队作业:Beta冲刺第二天

    2.1 今日完成任务情况 姚玉婷:房间管理功能测试文档的编写 马丽莎:酒店系统中商品管理功能的完善 张   琼:商品管理功能的测试 孙苗坤:商品管理功能的测试 2.2 明天任务安排 姚玉婷:酒店系统中 ...

  9. win 10 VMware与Hyper-v共存

    管理员身份运行命令提示符 cmd bcdedit /copy {current} /d "Windows10 no Hyper-V bcdedit /set {XXXXXXXX-XXXX-X ...

  10. Django --- cookie与session,中间件

    目录 1.cookie与session 1.cookie 2.session 2.中间件 1.中间件作用 2.用户可以自定义的五个方法 3.自定义中间件 1.cookie与session 1.cook ...