首页 > 其他 > 详细

awk命令

时间:2016-05-19 00:00:50      阅读:242      评论:0      收藏:0      [点我收藏+]

可以对列和行进行操作,awk有很多内建功能,比如数组,函数等。

结构:

#########################################################################
# File Name: awk.sh
# Author: lizhen
# mail: lizhen_ok@163.com
# Created Time: Wed 18 May 2016 09:48:10 PM CST
#########################################################################
#!/bin/bash
awk ‘
BEGIN{
    i=0
}
{
    i++
}
END{
    print i
}
‘ n

echo $?

awk由3部分构成,begin,end和带模式匹配选项常见语句块。注意这三部分都是被包含在单引号‘  ’或双引号“ ”之间的。

============

执行步骤:

1,执行BEGIN {commands}语句块中的语句

2,从文件或stdin中读取一行,然后执行pattern  {commands},重复这个过程,直到文件全部读取完毕

3,到读到输入流末尾时,执行END {commands}语句块

BEGIN语句块和END语句块都是可选的,BEGIN语句块在开始从输入流中读取行之前执行,常做的工作由变量初始化,打印输出表格等等

END语句块是在从输入流读取完所有的行之后即被执行的行,通常做些扫尾工作。

pattern语句块,可选。如果没有这个语句块,默认是{print },就是打印读取到的一行;awk对于每一行,都会执行这个语句块,就像一个读取行的while循环,在循环体提供了相应的语句。

 

print语句:当不带参数时,打印输出当前行

当print的参数是以逗号进行分隔时,参数打印时则以空格作为定界符

在print语句中,双引号是被当作拼接符号使用的。

[lizhen@dhcp-128-93 shell]$ echo | awk {var1="v1";var2="v2"; print var1,var2}
v1 v2
[lizhen@dhcp-128-93 shell]$ echo | awk {var1="v1";var2="v2"; print var1 "-" var2} 
v1-v2
[lizhen@dhcp-128-93 shell]$ 

===========

特殊变量

NR  当前的记录数量,就是执行过程当前行号

NF  字段数量,对应于当前行的字段数量

$0 这个变量包含执行过程中当前行的文本内容副本

$1  第一个字段的文本内容

$2  第二个字段的文本内容3

awk中printf()函数的语法与c语言中的同名函数一样,可以代替print

=====

将外部变量值传递给awk,使用-v选项

[lizhen@dhcp-128-93 shell]$ var=1000
[lizhen@dhcp-128-93 shell]$ echo | awk -v VAR=$var {print VAR}
1000
[lizhen@dhcp-128-93 shell]$ 

 

或者利用  从文件读取的思路:如下

[lizhen@dhcp-128-93 shell]$ var1="var1111";var2="var2222"
[lizhen@dhcp-128-93 shell]$ echo | awk {print v1,v2} v1=$var1 v2=$var2
var1111 var2222
[lizhen@dhcp-128-93 shell]$ 

3,使用getline读取行,getline var   ##var包含特定行的内容

awk默认读取一个文件的所有行,如果只想读取某一行,可以使用getline函数

有时候我们需要在BEGIN语句块中读取第一行

[lizhen@dhcp-128-93 shell]$ seq 5 | awk BEGIN {getline; print "read ahead first line", $0} {print $0}
read ahead first line 1
2
3
4
5
[lizhen@dhcp-128-93 shell]$ 

4,使用过滤模式对awk处理行进行过滤

8,最重要的就是awk内建的字符串控制函数了

length(string)

index(string,search_string)

split(string,array,delimiter)

substr(string,start-position,end-position)

sub(regex,replacement_str,string_

gsub(regex,replacement_str,string)

match(regex,string)

 

awk命令

原文:http://www.cnblogs.com/li-daphne/p/5506944.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!