打开高效文本编辑之门_Linux Awk自定义变量与操作符

Posted ShenLiang2025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开高效文本编辑之门_Linux Awk自定义变量与操作符相关的知识,希望对你有一定的参考价值。

Linux awk之变量与操作符应用案例

声明与简介

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的命令来处理文本。

本文是对awk的初步认识,主要结合数据以案例形式介绍怎样定义和使用自定义变量以及常见的运算符的使用。

数据说明

emp_3_only.txt,该数据来自全量的员工表的前3行。结构为(员工号、员工的姓名、岗位、领导编号、雇佣日期、工资、奖金、部门编号)

7369,smith,clerk,7902,'1980-12-17',800,null,20
7499,allen,salesman,7698,'1981-2-20',1600,300,30
7521,ward,salesman,7698,'1981-2-22',1250,500,30

定义变量

这里的变量区别于系统变量,是用户根据业务需要自定义的变量。

使用自定义变量

# 先打印员工的所有信息,再统计总工资数。定义如下脚本并保存到awk_var.awk内。
 BEGIN {
FS=",";
sum=0;
}
 {
print $1"的工资是:"$6;
 sum=sum+$6;
}
 END {
 print "\\n 员工的所有工资之和为:"sum;
 }

# 外部调用awk脚本
awk -f awk_var.awk emp_3_only.txt

# 结果为:
7369的工资是:800
7499的工资是:1600
7521的工资是:1250

 员工的所有工资之和为:3650

# 这里
Step1 通过定义自定义变量sum,初始化为0,
Step2 随文件的读取,一行行的对工资字段进行累加
Step3 输出累加后的值。

注:1 这里BEGIN需要大写。
    2 BEGIN必须和{在一行,它们之间可以无空格。

操作符号

操作符分为计算符、字符串运算符、赋值运算符、比较运算符、正则运算符。

常见运算符

常见的运算符如:+、-、*、/、++、--、%等。

# 通过运算符先将员工工资加1,然后再加100。这里用到了++、+。
awk -F',' '{print ++$6,$6+100}' emp_3_only.txt
# 结果
801 901
1601 1701
1251 1351

字符串运算

# 这里演示的是通过空格连接字符串,这里额外加了分隔符”$”。
awk 'BEGIN{ \\
str1="Hello"; \\
str2="awk"; \\
numstr="100"; \\
print str1 "$"str2;
print numstr++; \\
}'
#结果
Hello$awk
100

赋值运算符

常见的赋值运算符有 =、+=、-=、=、*=、%=。这里是把单一的赋值运算符”=”进行了延展即做常见运算后赋值。

# 使用赋值运算符演示 +=、%=的使用。
awk 'BEGIN{ \\
initnum =plusnum=modenum = 100; \\
plusnum += 20; \\
modenum %= 3; \\
print initnum "\\t"plusnum"\\t"modenum; \\
}'
# 结果
100 120 1

# 其代码等价于如下
awk 'BEGIN{ \\
initnum = 100; \\
plusnum = 100+20; \\
modenum = 100%3; \\
print initnum "\\t"plusnum"\\t"modenum; \\
}'

比较运算符

常见比较运算符有>、>=、<=、==、!=、&&、||

# 输出工资在1300和1700之间的员工编号和姓名。
awk -F"," '$6>=1300 && $6<1700 {print $1,$2,$6}' emp_3_only.txt
#结果
7499 allen 1600

正则匹配符

常见比较运算符有~、!~。其中~即为匹配的意思,而!~是反向(匹配不到的情况)。

# 匹配员工姓名里含“a”的员工,并打印出员工号、姓名、工资。
awk -F"," '$2 ~"a" {print $1,$2,$6}' emp_3_only.txt
#结果
7499 allen 1600
7521 ward 1250

 

以上是关于打开高效文本编辑之门_Linux Awk自定义变量与操作符的主要内容,如果未能解决你的问题,请参考以下文章

打开高效文本编辑之门_Linux awk之关联数组

打开高效文本编辑之门_Linux Awk之条件判断与循环

打开高效文本编辑之门_调用Linux的sed命令

打开高效文本编辑之门_Linux Sed模拟常见文件命令

打开高效文本编辑之门_熟悉Linux Sed的替换命令

打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用