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

定义变量

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

使用自定义变量

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

赋值运算符

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

# 1 使用赋值运算符演示 +=、%=的使用。
awk 'BEGIN{ \
initnum =plusnum=modenum = 100; \
plusnum += 20; \
modenum %= 3; \
print initnum "\t"plusnum"\t"modenum; \
}'
# 结果
100    120    1# 2 其代码等价于如下
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#结果
7499 allen 1600

正则匹配符

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

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

打开高效文本编辑之门_Linux awk之自定义变量与操作符相关推荐

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

    Linux awk之关联数组使用案例 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的命 ...

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

    Linux awk之变量与操作符应用案例 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应 ...

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

    Linux awk之条件判断与循环 声明与简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具.awk通常用来处理结构化(固定格式)的文本文件, awk每接收文件的一行,然后执行相应的命令 ...

  4. 打开高效文本编辑之门_Linux sed之模式空间与保留空间

    Linux sed之模式空间保留空间使用案例 声明与简介 sed:Stream Editor文本流编辑器,sed是一个"非交互式的"面向字符流的编辑器.本文主要结合数据以案例形式介 ...

  5. 打开高效文本编辑之门_Linux sed之多行命令与循环命令

    Linux sed之多行命令与循环命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. sed模式匹配是对文件的一 ...

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

    Linux sed 追加转换退出更新修改转换命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. sed其它命令汇 ...

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

    Linux sed 实现grep cat wc tail命令的效果对比案例 声明与简介 sed:Stream Editor文本流编辑器,sed是一个"非交互式的"面向字符流的编辑器 ...

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

    Linux sed命令执行方式汇总案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.Sed的命令执行主要介绍如何引用se ...

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

    Linux sed S替换命令常见使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器.本文主要以实际的数据来介绍sed ...

最新文章

  1. linux lvm 逻辑卷 创建 扩容 缩减 删除
  2. JavaCV 学习(一):JavaCV 初体验
  3. 【已解决】查看Python中已经安装的包
  4. armgcc交叉编译的文件无法运行_认识GCC交叉编译器
  5. 使用Hibernate和Spring构建Java Web应用程序
  6. XidianOJ 1099 A simple problem
  7. 什么叫诚实_他爱不爱你,身体最诚实
  8. YOLOv3网络结构
  9. Mysql 的时区问题:zeroDateTimeBehavior CONVERT_TO_NULL convertToNull
  10. 面试题编程题14-python 函数形参出现1个*号2个*号的含义
  11. Script:收集数据库中用户的角色和表空间等信息
  12. Spring - DI循环依赖
  13. 初中中考计算机考试,中考信息技术考试
  14. 27岁转行学什么计算机技术,27岁转行学IT有前途吗?
  15. 数学和编程-王垠博客
  16. 叫谁修猫呢?叫蓝总|ONES 人物
  17. EtherCAT主站SOEM在Ubuntu上的移植
  18. python join函数报错_python中join()函数的使用方法
  19. Windows驱动_WSK驱动之四WSK例程
  20. 最全shell脚本语句语法使用(超详细)

热门文章

  1. wxWidgets:wxWidgets 辅助功能示例
  2. wxWidgets:将 PNG 图像文件包含到可执行文件中
  3. boost::histogram::detail::accumulator_traits用法的测试程序
  4. GDCM:将PAPYRUS 3.0文件转换为dcm文件的的测试程序
  5. ITK:Delaunay贴合边缘翻转
  6. ITK:将itk :: Image转换为vtkImageData
  7. VTK:PolyData之BooleanOperationPolyDataFilter
  8. VTK:绘图之PlotLine3D
  9. OpenCV处理引起光学错觉的图像
  10. 具有OpenCV和相似度测量的视频输入