shell脚本之AWK 您所在的位置:网站首页 shell脚本中awk shell脚本之AWK

shell脚本之AWK

2023-07-28 18:38| 来源: 网络整理| 查看: 265

一、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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有