awk编程

一,基本语法

awk基本语法
awk ‘script’  files
awk '{pattern + action}' 或者 awk 'pattern {action}'

二,变量

在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表:

符号 含义 等价形式
= a = 5 a = 5
+= a = a + 5 a += 5
-= a = a - 5 a -= 5
*= a = a * 5 a *= 5
/= a = a / 5 a /= 5
%= a = a % 5 a %= 5
^= a = a ^ 5 a ^= 5

 除此之外,awk还提供了一组 内建变量(变量名全部大写),见如下列表:

变量名 变量内容
ARGC 命令行参数的数量。
ARGIND 命令行正在处理的当前文件的AGV的索引。
ARGV 命令行参数数组。
CONVFMT 转换数字格式。
ENVIRON 从shell中传递来的包含当前环境变量的数组。
ERRNO 当使用close函数或者通过getline函数读取的时候,发生的重新定向错误的描述信息就保存在这个变量中。
FIELDWIDTHS 在对记录进行固定域宽的分割时,可以替代FS的分隔符的列表。
FILENAME 当前的输入文件名。
FNR 当前文件的记录号。
FS 输入分隔符,默认是空格。
IGNORECASE 在正则表达式和字符串操作中关闭大小写敏感。
NF 当前文件域的数量。
NR 当前文件记录数。
OFMT 数字输出格式。
OFS 输出域分隔符。
ORS 输出记录分隔符。
RLENGTH 通过match函数匹配的字符串的长度。
RS 输入记录分隔符。
RSTART 通过match函数匹配的字符串的偏移量。
SUBSEP 下标分隔符。

三:awk规定引用外部变量必须使用单引号加双引号,即'"$sysvar"'这样的格式,但是split函数也需要双引号来定界,但这个双引号又不能让sh解释,而应留给awk来解释,所以使用了\"和\"组成的双引号

name="76868&5676&435&43526&334&12312312&12321"
awk 'BEGIN {print split(('"\"$name\""', filearray, "&")}'

注意与下面的区别:

awk 'BEGIN {name="76868&5676&435&43526&334&12312312&12321";  print split(name, filearray, "&") ;print filearray[1]}'

四,字符串连接操作

 将几个字符串连接起来使用"";如果使用+号,会自动转换为数值。

例如:awk 'BEGIN{a=100;b=200;c=(a""b);print c}' 

输出:100200

如果是这样:awk 'BEGIN{a=100;b=200;c=(a+b);print c}' 

输出:300

再如:awk 'BEGIN{a="a";b="bb";c=(a+b);print c}'  

输出:0

五,重定向

在 动作语句中使用shell通用的重定向输出符号">"就可以完成awk的重定向操作

 awk '$4 >= 70 {print $1,$2 > "passing_file"}' filename  #注意这里的文件名需要用双引号括起来。

awk中对于输入重定向是通过getline函数来完成的。getline函数的作用是从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得 输入。

语法:awk 'BEGIN { "command" | getline d; print d}'

对于command中,对于局部变量要使用加双引用,对于命令本身中要加双引号的地方改成\" \"。

例如:cat /etc/shadow | awk 'BEGIN {FS=":";ta="19700101 +"};{tc=ta""$3" days"; "date --date=\""tc"\" +%Y%m%d" | getline bb} ; {print $1,$2,bb}'

再如:head -n4 /etc/shadow | awk 'BEGIN {FS=":";OFS="\t"};{"date --date=\"19700101 +"$3" days\" +%Y%m%d" | getline expir};{print $1,$2,expir}'

date --date="string" 对于此命令来说,如果string中有空格,那必须加双引号。为此,对于输入重定向 动作中上,就应把里面的双引号改为\",并且对于里面用到的变量加上双引号"$3"或"tc"

参考:

http://www.cnblogs.com/mchina/archive/2012/06/30/2571317.html

http://blog.sina.com.cn/s/blog_4d1f40c00100r7y3.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值