一、AWK的变量

二、AWK的运算符

一、AWK变量

每一门编程语言都会使用到变量,使用变量会让代码更加简洁,方便程序员编写,带来极大的便捷,AWK本身也是一门编程语言,所以它本身也有一些内置变量,方便使用,其中主要使用的是AWK的记录变量和数据变量。

1.AWK的记录变量

  • FS:(filed separator)读取文件时,所使用的分隔字段
[root@bogon ~]# awk 'BEGIN {FS=":"}{print $1,$3}' /etc/passwd | head -3
root 0
bin 1
daemon 2

类似,-F选项:

[root@bogon ~]# awk -F: '{print $1,$3}' /etc/passwd | head -5
root 0
bin 1
daemon 2
adm 3
lp 4
  • OFS:(output filed separator)输出分隔符,可以更换默认分隔符
[root@bogon ~]# awk -F: 'BEGIN {OFS="#"}{print $1,$3}' /etc/passwd | head -5
root#0
bin#1
daemon#2
adm#3
lp#4

2.AWK的数据变量

  • NR:(The number of input records)表示awk命令所处理的记录数,单个文件表示文件的行数,如果有多个文件,这个数目会把处理的多行文件合并到一起输出行号。
[root@bogon ~]# cat 1.txt
112
112
1334
1134
113225[root@bogon ~]# cat 2.txt
aaa
ccc
aaa
sddd
ffff
ss
[root@bogon ~]# awk '{print NR}' 1.txt
1
2
3
4
5
6
[root@bogon ~]# awk '{print NR}' 2.txt
1
2
3
4
5
6
[root@bogon ~]# awk '{print NR}' 1.txt 2.txt
1
2
3
4
5
6
7
8
9
10
11
12
[root@bogon ~]#
  • FNR 单个文件时和NR相同,多个文件时刚好和NR相反,它会将每一个文件的合并到一起行号单独输出。
[root@bogon ~]# awk '{print FNR}' 1.txt
1
2
3
4
5
6
[root@bogon ~]# awk '{print FNR}' 1.txt 2.txt
1
2
3
4
5
6
1
2
3
4
5
6
  • NF:(number of field)记录当前field的个数,记录当前总字段(记录awk正在处理的当前行被分隔成几个字段)
[root@bogon ~]# awk -F: '{print NF}' /etc/passwd | head -4
7
7
7
7
[root@bogon ~]# awk  '{print NF}' 1.txt | head -4
3
3
4
4
未指定分隔符时默认是空格。
  • ENVIRON:当前shell环境变量以及其值的关联数组
[root@bogon ~]# awk 'BEGIN {print ENVIRON["PATH"]}'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@bogon ~]# awk 'BEGIN {print ENVIRON["SHELL"]}'
/bin/bash
[root@bogon ~]# awk 'BEGIN {print ENVIRON["USER"]}'
root

3.用户自定义变量

其实我们使用的awk实际上是gawk的链接,在使用gawk自定义变量时,变量名的命名和其他程序设计类语言一样都是使用字母、数字、下划线,数字不能作为变量名的开头,字母严格区分大小写。

(1)在gawk中使用赋值语句给变量赋值

[root@bogon ~]# awk 'BEGIN {msg="hello world";print msg}'
hello world

(2)在命令行中使用参数给变量赋值

[root@bogon ~]# awk -v msg="hello world!" 'BEGIN {print msg}'
hello world!

二、AWK运算符

在程序设计中我们会经常运用到运算符,如:算数运算符、逻辑运算符、等

(1)awk中的算术运算符

  • -x: 负值
  • +x:转换为数值
  • x^y:次方
  • x**y:次方
  • x*y:乘法
  • x/y:除法
  • x+y:加法
  • x-y:减法
  • x%y:取余
    示例:
[root@bogon ~]# awk 'BEGIN{x=2;y=3;print x**y,x^y,x*y,x/y,x+y,x-y,x%y}'
8 8 6 0.666667 5 -1 2

(2)赋值运算符

  • =:赋值
  • +=:加等于
  • -=:减等于
  • *=:乘等于
  • /=:除等于
  • %=:取余等于
  • ^=:次方等于
  • **=:次方等于
  • ++:自增一
  • - -:自减一
    

示例:

[root@bogon ~]# awk 'BEGIN{x=3;y=x;printf "%-5s %i\n%-5s %i\n","++x",++x,"--y=",--y}'
++x   4
--y=  2

(3)逻辑表达式

&&和||
&&表示与运算
||表示或运算

示例:

[root@bogon ~]# awk -F: '$3>100 && $4>100 {print $1,$3,$4}' /etc/passwd
nobody 65534 65534
systemd-coredump 999 997
systemd-resolve 193 193
polkitd 998 996
libstoragemgmt 997 995
cockpit-ws 996 993
cockpit-wsinstance 995 992
sssd 994 990
chrony 993 989
rngd 992 988
nginx 991 987
chen 1000 1000
[root@bogon ~]# awk -F: '$3>100 || $4>100 {print $1,$3,$4}' /etc/passwd
nobody 65534 65534
systemd-coredump 999 997
systemd-resolve 193 193
polkitd 998 996
libstoragemgmt 997 995
cockpit-ws 996 993
cockpit-wsinstance 995 992
sssd 994 990
chrony 993 989
rngd 992 988
nginx 991 987
chen 1000 1000

(4)AWK字符串操作符
一般用于字符串的连接

[root@bogon ~]# awk 'BEGIN{print "This","is","xian"}'
This is xian

shell脚本之AWK-AWK的变量和AWK运算符相关推荐

  1. Shell脚本攻略02-玩转变量与环境变量

    概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...

  2. shell 脚本处理多行文本的记录 -- awk

    1.参考awk处理多行文本的记录_weixin_30457465的博客-CSDN博客, 对其中的脚本代码增加注释说明 #!/usr/bin/awk -f# 设置输入流的分隔符号,根据分割符号拆分为一个 ...

  3. 【Shell】20天学会shell脚本命令(2)变量的详解

    一.问题 1.1.环境 电脑环境:Windows 10: Docker版本:Server Version: 19.03.3 1.2.问题 shell脚本一直是Linux的必回只语言:就像去英语系国家工 ...

  4. shell脚本基础介绍与特使变量

    一shell介绍 1.用途:使用简单,是Shell命令的集合 优点:运行节省时间,可实现批量管理,自动化,批量处理减少出错概念率. 2.shell概述: shell:命令解释器,也是一个程序 种类:s ...

  5. 使用shell脚本ssh远程执行命令,使用awk时总是报错

    ssh -o StrictHostKeyChecking=no root@$ip "ps -ef |grep ${SERVER_EXE} |grep -v grep | awk '{prin ...

  6. SHELL脚本编程:sed高级应用和awk基本用法(SHELL----DAY31)

    回顾 正则表达式 基本正则 ^ $ [] [^] . * {n,m} {n} {n,} () 扩展正则 + ? {n,m} ( ) | \b sed 前置命令 | sed 选项 (定址符)指令 sed ...

  7. Shell脚本学习之二:变量与运算符

    variable-name = value [root@Gwan ~]# LOCALTEST="test" [root@Gwan ~]# echo ${LOCALTEST} tes ...

  8. Shell脚本笔记(3)- 变量子串

    变量子串 格式:${变量} 主要的作用:变量子串的效率要比相应的命令执行的效率高 man bash 参考 parameter 内容 parameter 变量 含义 ${para} 返回变量的内容 ${ ...

  9. 常用Shell脚本编写的内置变量

    2019独角兽企业重金招聘Python工程师标准>>> 参数处理-Shell传入参数的处理 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数.与位置变量不同, ...

  10. linux读取环境变量替换,linux Shell脚本学习笔记二(变量和环境变量)

    2.变量和环境变量 使用env命令在终端中查看所有与此终端进程相关的环境变量.对于每个进程,在起运行时的环境变量可以使用下面的命令来查看: cat /proc/$PID/environ 其中,将PID ...

最新文章

  1. CSDN 开学见面礼!限时免费申请,手慢无!
  2. 探索 OSGi 框架的组件运行机制
  3. JAVA基础知识(5)
  4. 织梦内容管理系统(DedeCMS)
  5. centos7 安装VNC Server
  6. C语言中的函数(详解)
  7. 为什么培训出来的学员总喜欢包装成三年工作经验?
  8. 一鸣心所向:想成功?变身蝙蝠侠吧
  9. 如何使用纯 CSS(border-radius 和 clip)属性画出半圆
  10. 树莓派hc+sr501+c语言,树莓派连接人体红外感应模块HC-SR501
  11. 睡前必备神器——倒计时定时关闭手机音乐声音APP
  12. JVM--Java虚拟机
  13. 使用virt-manager管理虚拟机
  14. ‘今年找工作太难了,真的是卷到我想哭!’,一个疫情就业季下的毕业生艰辛IT求职道路上的经验分享!见识入社会的不容易!
  15. 3G移动网络,给WAP带来什么?
  16. Python中变量的基本使用
  17. 汉堡商业银行经济学家:“蒸汽平台”正式上线测试
  18. linux的qt中出现error2,Windows下Qt代码出现的错误总结
  19. 如何在Java中将GIF图像转换为PNG等图像格式?试试Aspose
  20. Android Studio 不显示LogCat 日志 的几种解决办法

热门文章

  1. 拉格朗日乘子法:写得很通俗的文章
  2. java进制转换代码
  3. 数据库的范式,第一、二、三、四、五范式、BC范式,为什么分不清
  4. 自适应模糊PID控制算法
  5. web前端项目开发流程
  6. 程序员的中年的危机应对手册
  7. restTemplate实现 authorization basic权限认证(带账号密码)
  8. [Java]public T void method,此地泛型的意思
  9. 基于STC51:四轴飞控开源项目原理图与源码(入门级DIY)
  10. BootLoader这个玩意