|NO.Z.00005|——————————|LinuxShell|——|Linux&Shell&字符截取和替换命令.V03|——|awk条件|

一、awk命令
### --- awk基本使用
~~~     动作(Action):
~~~     格式化输出
~~~     流程控制语句
~~~     条件(Pattern):
~~~     一般使用关系表达式作为条件。这些关系表达式非常多,具体参考表 12-3 所示,例如:

[root@localhost ~]# awk ‘条件 1{动作 1} 条件 2{动作 2}…’ 文件名
x > 10                                      // 判断变量 x 是否大于 10
x == y                                      // 判断变量 x 是否等于变量 y
A ~ B                                       // 判断字符串 A 中是否包含能匹配 B 表达式的子字符串
A !~ B                                      // 判断字符串 A 中是否不包含能匹配 B 表达式的子字符串
### --- awk实验
~~~     我们这里先来学习 awk 基本用法,也就是只看看格式化输出动作是干什么的
~~~     至于条件类型和流程控制语句我们在后面再详细介绍那看看这个例子吧:

[root@localhost ~]# awk '{printf $2 "\t" $6 "\n"}' student.txt
Name    Average
Liming  87.66
Sc  85.66
Tg  91.66
### --- 输出第二列和第六列
~~~     比如刚刚截取 df 命令的结果时,cut 命令已经力不从心了,我们来看看 awk 命令

[root@localhost ~]# df -h | awk '{print $1 "\t" $3}'
Filesystem  Used
/dev/sda8   1.2G
devtmpfs    0
tmpfs   0
tmpfs   6.8M
tmpfs   0
/dev/sda6   33M
/dev/sda5   134M
tmpfs   0

一、awk的条件
  条件 说明
awk保留字 BEGIN

在 awk 程序一开始时,尚未读取任何数据之前执行。BEGIN 后

的动作只在程序开始时执行一次
END

在awk程序处理完所有数据即将结束时执行END后动作在程序结束时执行一次

关系运算符 > 小于
< 大于
>= 大于等于
<= 小于等于
== 等于,用于判断两个值是否相等,如果是 给变量赋值,请使用=号
!= 不等于
A~B 判断字符串A中是否包含能匹配B表达式的子字符串
A!~B 判断字符串A中是否不包含匹配B表达式的子字符串
正则表达式 /正则/ 如果在//中可以写入字符,也可以支持正则表达式
二、awk条件参数实验:BEGIN
### --- BEGIN

~~~     BEGIN 是 awk 的保留字,是一种特殊的条件类型。
~~~     BEGIN 的执行时机是“在 awk 程序一开始时,尚未读取任何数据之前执行”。
~~~     一旦 BEGIN 后的动作执行一次,当 awk 开始从文件中读入数据,
~~~     BEGIN的条件就不再成立,所以 BEGIN 定义的动作只能被执行一次。例如:
 
~~~     注:awk 命令只要检测不到完整的单引号不会执行,所以这个命令的换行不用加入“\”,就是一行命令
~~~     注:这里定义了两个动作
~~~     注:第一个动作使用 BEGIN 条件,所以会在读入文件数据前打印“这是一张成绩单”(只会执行一次)
~~~     注:第二个动作会打印文件的第二字段和第六字段

[root@localhost ~]# awk 'BEGIN{printf "This is a transcript \n" } {printf $2 "\t" $6 "\n"}' student.txt
This is a transcript 
Name    Average
Liming  87.66
Sc  85.66
Tg  91.66
三、awk条件参数实验:END
### --- awk条件参数实验:END
~~~     END 也是 awk 保留字,不过刚好和 BEGIN 相反。END 是在 awk 程序处理完所有数据,
~~~     即将结束时执行。END 后的动作只在程序结束时执行一次。例如:

[root@localhost ~]#  awk 'END{printf "The End \n" }
{printf $2 "\t" $6 "\n"}' student.txt
Name    Average
Liming  87.66
Sc  85.66
Tg  91.66
    
The End 

 
 
 
 
 
 
 
 
 

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  阅读(36)  评论(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

导航

统计

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