shell 之 gawk (二) 高级篇

本文详细介绍了gawk命令行工具的内置变量、用户定义的变量、数组、模式、结构化命令和内置函数等内容,提供了实用的示例和解释,帮助读者掌握gawk的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、内置变量

1、字段和记录分隔符变量

FIELDWIDTHS   以空格分隔的数字列表,用空格定义每个数据字段的精确宽度

FS  输入字段的分隔符    (默认空格)

RS 输入记录的分隔符   (默认换行符)

OFS 输出字段的分隔符

ORS 输出记录的分隔符

2、数据变量

ARGC

ARGIND

ARGV

CONVFMT

ENVIRON

ERRNO

FILENAME

FNR

IGNORECASE

NF

NR

OFMT

RLENGTH

RSTART


例如:

 gawk 'BEGIN {print ARGC, ARGV[1]}' data


 gawk 'BEGIN { print ENVIRON["HOME"]}'


 gawk 'BEGIN { FS=":"; OFS=":"} {print $1, $NF}' /etc/passwd



FNR与NR的区别:

gawk 'BEGIN {FS=","} {print $1, "FNR="FNR}' data1 data1

FNR变量值在gawk处理第二个数据文件时被重置,但NR会继续增加



二、用户定义的变量


1、在脚本中赋值变量

$ gawk ' BEGIN { testing="this is a test"; pring testing; testing=40; print testing}'


2、在命令行中赋值

$ cat script

BEGIN { FS=","} {print $n}

$ gawk -f script n=2 data

在BEGIN中使用变量需要使用 -v

$ gawk -v n=3 -f script2 data


三、使用数组  (关联数组)


1、定义数组变量              var[index] = element

$ gawk 'BEGIN { cap["xia"]="tian"; print cap["xia"]}'

$ gawk 'BEGIN { var[1]=2; var[2]=3; total= var[1] + var[2]; print total}'


2、在数组变量中递归

for( var in array)

{

statements

}

每次都向var分配array关联数组中的下一个索引值;  索引值不是以一定的顺序返回的

3、删除数组变量

delete  array[index]


四、使用模式


1、正则表达式

正则表达式必须出现在程序脚本的左括号前面;

$ gawk 'BEGIN { FS=","} /11/ {print $1}' data


2、匹配操作符 (波浪号~)

$1 ~ /^data/ 


如: $   gawk 'BEGIN { FS=","} $2 ~ /^data2/{print $0}'  data1

将data1 文件中的 第二个数据字段与正则表达式进行比较,匹配的那行 打印出


如: $ gawk  -F: '$1 ~ /rich/ { print $1, $NF}'  /etc/passwd

rich    /bin/bash


3、数学表达式     ==   <   <=    >   >=

   $ gawk -F: '$4 == 0{ print $1}' /etc/passwd    (显示所有属于根用户组的系统用户)



五、结构化命令


1、 if 语句

if (conditin)

statement1


2、while语句


while (condition)

{

statements

}

(支持break   ,  continue)

3、do-while语句

do

{

statements

}while(condition)

4、for语句

与C语言一样

5、格式化打印

printf  "format  string",  var1,  var2 .....  (与C类似)

如:

$  gawk 'BEGIN{

>  x = 10 * 100

>  printf "the answer is :  %e\n", x

>}'

the  answer is 1.000000e+03


六、内置的函数


七、用户定义的函数


1、定义函数

function  name( [variables])

{

statements

}

可以使用return语句

function myrand(limit)

{
return int(limit * rand())

}


2、使用自己的函数

定义函数时,必须单独出现在定义的任何代码部分(包括BEGIN)

$ gawk '

> function myprint()

>{

> printf "%-16s  -  %s\n", $1, $4

> }

>BEGIN{ FS="\n"; RS=""}

>{

> myprint()

>}' data2



3、创建函数库


首先,创建函数库文件

$ cat funclib

function myprint()

{

.........

}

function myrand()

{

..........

}

不能将-f 与内嵌的gawk脚本结合使用,因此:

 要使用库,只需要创建包含gawk程序的文件,然后在命令行上指定库文件和程序文件

$ cat script4

BEGIN{ FS="\n"; RS=""}

{

myprint()

}

使用:

 $ gawk -f funclib -f script4 data2











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值