linux变量组,linux awk 学习笔记1(print 、变量、数组)

文章摘抄至 http://www.cnblogs.com/image-eye/archive/2011/10/31/2230280.html

先了解awk 的工作原理:

1. AWK读取输入文件一次一行。

2. 对于每一行,它匹配在给定的顺序模式,如果匹配,执行相应的动作。

3. 如果没有模式匹配,将执行任何行动。

4. 在上面的语法,无论是搜索模式,或行动是可选的,但不能同时。

5. 如果没有给出搜索模式,然后awk要执行每一行输入给定的行动。

6. 如果没有给出动作,打印,这是默认的操作与模式相匹配的所有行。

7. 空出的任何行动括号什么都不做。它不会执行默认的打印操作。

8. 中的每个行动的声明应该用分号分隔。

例子说明

#原始文本数据

$cat employee.txt

100 Thomas Manager Sales $5,000

200 Jason Developer Technology $5,500

300 Sanjay Sysadmin Technology $7,000

400 Nisha Manager Marketing $9,500

500 Randy DBA Technology $6,000

#查看包含Thomas字段的数据,注意$0代表当前行

[root@eccs_web ~]# awk '/Thomas/{print $0}' employee.txt

100 Thomas Manager Sales $5,000

#默认情况下的awk打印文件的每一行。

[root@eccs_web ~]# awk '/Thomas/{print}' employee.txt

100 Thomas Manager Sales $5,000

#显示根据空格分段之后的第2列和第5列数据,数据是从第1列开始,第0列代表当前行

[root@eccs_web ~]# awk '{print $2,$5;}' employee.txt

Thomas $5,000

Jason $5,500

Sanjay $7,000

Nisha $9,500

Randy $6,000

#打印制表符

[root@eccs_web ~]# awk 'BEGIN{ print "Name\tDesignation\tDepartment\tSalary";}

> {print $2,"\t",$3,"\t",$4,"\t",$NF;}

> END{print "Report Generated\n---------------";

> }' employee.txt

Name Designation Department Salary

Thomas Manager Sales $5,000

Jason Developer Technology $5,500

Sanjay Sysadmin Technology $7,000

Nisha Manager Marketing $9,500

Randy DBA Technology $6,000

Report Generated

---------------

#正则表达式匹配

[root@eccs_web ~]# awk '$4~/Technology/' employee.txt

200 Jason Developer Technology $5,500

300 Sanjay Sysadmin Technology $7,000

500 Randy DBA Technology $6,000

变量

1、内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

例子

内置变量FS,表示“输入字段分隔符”

[root@auc-test2 1]# gawk 'BEGIN{FS=":"} {print $1,$2,$3}' /etc/passwd

root x 0

bin x 1

daemon x 2

adm x 3

内置变量OFS,表示“输出字段分隔符”

[root@auc-test2 1]# gawk 'BEGIN{FS=":";OFS="-"} {print $1,$2,$3}' /etc/passwd

root-x-0

bin-x-1

daemon-x-2

2、gawk数据变量

ARGC命令行参数个数

AGRV命令行参数排列

ENVIRON支持队列中系统环境变量的使用

FILENAMEawk浏览的文件名

FNR浏览文件的记录数

FS设置输入域分隔符,同- F选项

NF浏览记录的域个数

NR已读的记录数

OFS输出域分隔符

ORS输出记录分隔符

RS控制记录分隔符

例子

[root@auc-test2 1]# gawk 'BEGIN{print ENVIRON["HOME"];print ENVIRON["PATH"]}'

/root

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

3、自定义变量

例子

[root@eccs_web huangbiao]# awk 'BEGIN{test="hello awk";print test}'

hello awk

[root@auc-test2 1]# gawk 'BEGIN{x=4;x=x*2+3;print x}'

11

#执行脚本文件

[root@auc-test2 tmp]# cat script1

BEGIN{FS=":"}

{print $n}

[root@auc-test2 tmp]# gawk -f script1 n=5 /etc/passwd

root

bin

数组

1使用字符串作为数组坐标

[root@auc-test2 tmp]# gawk 'BEGIN{var["name"]="huangbiao";print var["name"]}'

huangbiao

2使用数字作为数组坐标

[root@auc-test2 tmp]# gawk 'BEGIN{var[1]=34;var[2]=3;total=var[1]+var[2];print total}' 37

3数组遍历

[root@auc-test2 tmp]# gawk 'BEGIN{

> var["a"]=1

> var["b"]=2

> var["c"]=3

> var["d"]=4

> for(test in var){

> print "Index:",test,"- Value:",var[test]

> }

> }'

Index: a - Value: 1

Index: b - Value: 2

Index: c - Value: 3

Index: d - Value: 4

等价于

[root@auc-test2 tmp]# gawk 'BEGIN{var["a"]=1;var["b"]=2;var["c"]=3;var["d"]=4;for(test in var){print "Index:",test,"- Value:",var[test]}}'

Index: a - Value: 1

Index: b - Value: 2

Index: c - Value: 3

Index: d - Value: 4

备注:换行需要”;”来隔开,awk里面的代码与shell编程的格式不一致,但是与传统的java或者javascript方式很相似,不需要太多的在意空格,字符串连接需要注意。

4删除数组

[root@auc-test2 tmp]# gawk 'BEGIN{var["a"]=1;var["b"]=2;var["c"]=3;var["d"]=4;for(test in var){print "Index:",test,"- Value:",var[test]};delete var["b"];print "------";for(test in var){print "Index:",test,"- Value:",var[test]}}'

Index: a - Value: 1

Index: b - Value: 2

Index: c - Value: 3

Index: d - Value: 4

------

Index: a - Value: 1

Index: c - Value: 3

Index: d - Value: 4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值