|NO.Z.00009|——————————|LinuxShell|——|Linux&Shell&字符截取和替换命令.V07|——|流程控制|

一、awk流程控制
### --- 我们再来利用下 student.txt 文件做个练习,
~~~     后面的使用比较复杂,我们再看看这个文件的内容:

[root@localhost ~]# cat student.txt
ID  Name    PHP Linux   MySQL   Average
1   Liming  82  95  86  87.66
2   Sc  74  96  87  85.66
3   Tg  99  83  93  91.66
### --- 我们先来看看该如何在 awk 中定义变量与调用变量的值。
~~~     假设我想统计 PHP 成绩的总分,那么就应该这样:

### --- 注释:
~~~     注:我们解释下这个命令。“NR==2{php1=$3}”(条件是 NR==2,动作是 php1=$3)这句话是指如果
~~~     注:输 入 数 据 是 第 二 行 ( 第 一 行 是 标 题 行 ) , 就 把 第 二 行 的 第 三 字 段 的 值 赋 予 变 量 “ php1 ” 。
~~~     注:“NR==3{php2=$3}”这句话是指如果输入数据是第三行,就把第三行的第三字段的值赋予变量“php2”。
~~~     注:“NR==4{php3=$3;totle=php1+php2+php3;print "totle php is " totle}”(“NR==4”是条件,后
~~~     注:面{}中的都是动作)这句话是指如果输入数据是第四行,就把第四行的第三字段的值赋予变量“php3”;
~~~     注:然后定义变量 totle 的值是“php1+php2+php3”;然后输出“totle php is”关键字,后面加变量 totle的值。

[root@localhost ~]# awk 'NR==2{php1=$3}
> NR==3{php2=$3}
> NR==4{php3=$3;totle=php1+php2+php3;print "totle php is " totle}' student.txt
totle php is 255
### --- 在 awk 编程中,因为命令语句非常长,在输入格式时需要注意以下内容:

~~~     多个条件{动作}可以用空格分割,也可以用回车分割。
~~~     在一个动作中,如果需要执行多个命令,需要用“;”分割,或用回车分割。
~~~     在 awk 中,变量的赋值与调用都不需要加入“$”符。
~~~     条件中判断两个值是否相同,请使用“==”,以便和变量赋值进行区分。
### --- 在看看该如何实现流程控制,假设如果 Linux 成绩大于 90,
~~~     就是一个好男人(学 PHP 的表示压力很大!):
~~~     程序中有两个 if 判断,第一个判断行号大于 2,第二个判断 Linux 成绩大于 90 分

[root@localhost ~]# awk '{if (NR>=2)
{if ($4>90) printf $2 " is a good man!\n"}}' student.txt
Liming is a good man!
Sc is a good man!
### --- 其实在 awk 中 if 判断语句,
~~~     完全可以直接利用 awk 自带的条件来取代,刚刚的脚本可以改写成这样:
~~~     先判断行号如果大于 2,就把第四字段赋予变量 test
~~~     在判断如果 test 的值大于 90 分,就打印好男人

[root@localhost ~]# awk ' NR>=2 {test=$4}
test>90 {printf $2 " is a good man!\n"}' student.txt
Liming is a good man!
Sc is a good man!

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示