Shell三剑客:awk(awk编辑编程)一

2023-12-24 22:37:24

一、awk脚本定义格式

格式1:
BEGIN{} pattern{} END{}

格式2:
#!/bin/awk -f
#add 'x' right
BEGIN{} pattern{} END{}
  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}
  • 格式1假设为f1.awk文件,格式2假设为f2.awk文件?
awk [-v var=value] f1.awk [file]
f2.awk [-v var=value] [var1=value1] [file]
  • awk [-v var=value] f1.awk [file],把处理阶段放到一个文件而已,展开后就是普通的awk语句。
  • f2.awk [-v var=value] [var1=value1] [file] 中 [-v var=value] 是在BEGIN之前设置的变 量值,[var1=value1]是在BEGIN过程之后进行的,也就是说直到首行输入完成后,这个变量才可用。?

二、脚本示例

? ? ? ? 示例1

[root@localhost ~]# vim f2.awk
#!/bin/awk -f
{if($3>=1000)print $1,$3}

[root@localhost ~]# awk -F: -f f2.awk /etc/passwd
tom 1000
jack 1001
Tom 1002
Jack 1004
opp 1008
abc 1009
qian 1010
yoa 1011
huang 1012
kai 1013
kong 1014
cai 1015
duo 1016
gou 1017
ji 1018
liangl 1019
han 1020

?

?

? ? ? ? 示例2

[root@localhost ~]# vim score.txt    #1、创建一个文件(学生成绩表)
Marry 2143 78 84 77
Jack  2321 66 78 45
Tom   2122 48 77 71
Mike  2537 87 97 95
Bob   2415 40 57 62

[root@localhost ~]# vim cal.awk    #2、定义 awk 脚本
#!/bin/awk -f
#运行前
BEGIN {
        math =0 
        english =0
        computer =0
         
        printf "NAME   NO.   MATH   ENFLISH   COMPUTER   TOTAL\n"       
        printf "----------------------------------------------\n" 
}
#运行中
{
        math+=$3
        english+=$4
        computer+=$5
        printf "%-6s %-6s %4d %8d %8d %8d\n",$1,$2,$3,$4,$5,$3+$4+$5
}
#运行后
END {
        printf "----------------------------------------------\n"
        printf"   TOTAL:%10d %8d %8d \n", math,english,computer
        printf"AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

[root@localhost ~]# awk -f cal.awk  score.txt     #执行脚本
NAME    NO.   MATH   ENFLISH   COMPUTER   TOTAL
-----------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
-----------------------------------------------
  TOTAL:       319      393      350 
AVERAGE:     63.80    78.60    70.00

?

?

?

?

?

?

文章来源:https://blog.csdn.net/weixin_73783595/article/details/135187483
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。