欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AWK

程序员文章站 2022-06-01 16:58:25
...

AWK


awk默认以空格符为间隔符号,将每行分隔为单独的字段,也可以使用awk内置变量FS定义间隔符号。

eg:awk 'BEGIN {FS="[:\t+ ]"} {print $1}' file.passwd 说明:多个间隔符、多个tab当做一个

awk -v test="abc" 'BEGIN {print test}' 说明:-v代表设置变量

awk '{if ($2~/^[0-9][0-9]$/) print $0}' score 说明:匹配第二个字段是两位数字的


系统变量


NF变量标识当前记录的字段数

eg:awk -F: '{print NF"="$NF}' file.passwd


NR当前记录的个数,可用作行号,多个文件为总记录数

eg:awk 'BEGIN {FS=":"};{print NR,$1}' file.pw 


FNR当前记录的个数,多个文件分别为自己的记录数

eg:awk 'BEGIN {FS=":"};{print NR,$1}' file.pw /etc/passwd


OFS输出字符的分割符(默认为空格)

eg:awk 'BEGIN {OFS="\n\t"};{all=$2+$3+$4+$5+$6;print $1,all}' score


ORS输出记录的分割符(模人物换行)

eg: awk 'BEGIN {OFS="\n\t";ORS="\n#"};{all=$2+$3+$4+$5+$6;print $1,all}' score


ARGC命令行中参数的个数、ARGV包含命令行参数的数组

eg:awk 'BEGIN {print "ARGC="ARGC;for(i in ARGV) {print i"="ARGV[i];}}' file.pw /etc/passwd


操作符


赋值操作符 =、+=、-=、/=、^=、**=

eg:awk '{x+=1;print x,$0}' score

三目 ? :

逻辑或 ||、逻辑与&&

eg:awk '{if ($2~/^[0-9][0-9]$/ && $3>90) print $0}' score

关系操作符<、<=、>、>=、!=、==

eg:awk '{if ($2>90) print $0}' score

字段引用$


运算符


加减法 +、-

乘、除、取模 *、/、%

求幂 ^、**

递增、递减 ++、--


条件语句


if else

eg:awk 'BEGIN {if (0) {print "ok"} else {print "fail"}}'

eg:awk '{if ($3<90){print $1,$NF}}' score

eg:awk -F: '{if ($3<100 && $NF~/\/bin\/bash/) {print $1,$NF}}' /etc/passwd

eg:awk -F: -f a.awk /etc/passwd

eg:awk -F: '{for (i=NF;i>0;i--) print $i;print "\n"}' file.pw


函数


eg:awk 'BEGIN {print rand();print rand();srand();print rand();print rand()}'

eg:awk 'BEGIN {phone = substr("13900443291",5);print phone}'

eg:awk 'BEGIN {phone = substr("13900443291",1,5);print phone}'

eg:awk 'BEGIN {phone = length("13900443291");print phone}'

eg:awk -F: '{print $1,toupper($1),tolower(toupper($1))}' file.pw 



附文件:

a.awk

{
if($3 < 100)
	print $1,$3
else if ($3 >= 100 && $3 < 500)
	print $1,$3,$NF
else
	print $1,$3,$4,$NF
}

file.pw

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:


score

kevin 100 100 88 98 78
tony 90 84 94 28 39
clare 90 99 98 96 100
jorey 89 100 99 88 97





AWK


相关标签: awk