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. python3 xml_to_dict、dict_to_xml等互相转换的方法

    from basic_config_vars.config_vars import moviesAllFilePath,moviesFilePath #自定义的一些文件变量 import xmltod ...

  2. 安装k8s,使用root帐号的初始化脚本

    现在稳定性差不多了.可以总结一下了. 真正使用时,有几个地方,还是确认一下,再正式运行吧. #!/bin/bash # Version V0. ---: ;fi K8S_VERSION="1 ...

  3. Nmap扫描工具实验报告

    实验报告 实验内容 通过ping进行操作系统探测 利用Zenmap/Nmap进行TCP connet扫描.TCP SYN扫描和操作系统扫描 实验目的 了解扫描的一般步骤 熟练使用ping命令并能够进行 ...

  4. 2-html标题、段落、换行与常用的字符实体

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Django --- 常用字段及参数

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  6. matlab之数组反序输出

    a=[1 2 3 4 5] a(end:-1:1)=[5 4 3 2 1]

  7. PostgreSQL 锁机制浅析

    锁机制在 PostgreSQL 里非常重要 (对于其他现代的 RDBMS 也是如此).对于数据库应用程序开发者(特别是那些涉及到高并发代码的程序员),需要对锁非常熟悉.对于某些问题,锁需要被重点关注与 ...

  8. PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库

    转载自:https://yq.aliyun.com/articles/582880 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB). 如果访问有坏块的表. 如何从无法启动的数据库中 ...

  9. Base64原理解析与使用

    一.Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的 ...

  10. (13)打鸡儿教你Vue.js

    一小时复习 vue.js是一个JavaScriptmvvm库,是以数据驱动和组件化的思想构建的,相比angular.js,vue.js提供了更加简洁,更加容易理解的api,如果习惯了jquery操作d ...