awk用法总结

来源:互联网 发布:手机屏幕跑出蜘蛛软件 编辑:程序博客网 时间:2024/05/28 16:18

awk 主要用于数据提取

运行awk,需要一个告诉awk怎么做的awk程序。

awk是由一系列指令组成,每个指令是由一个搜索模式和一个执行动作组成,多个指令之间用换行符分开

pattern {action} \n

pattern {action}


运行awk有两种方式,

1,awk程序很短,可以直接写在运行awk的命令行中

2,awk程序比较长,通常放在一个文件中,使用-f来指出awk文件,文件一般使用.awk做为后缀


awk常用的选项有:

-F   fs  用于指定数据的列分隔符,默认的是空格

-v   var=value指定value给var,这些变量值用于awk程序的BEGIN块

-f   指定运行awk时的文件,运行awk的第二种方式


BEGIN  END

BEGIN块的作用主要为声明变量,对于已有变量进行赋值,在读取文件开始执行之前调用

END块的作用主要为在文件处理结束之后调用,比如打印文件有多少行被处理,等等。


awk变量

$1 $2………………从1开始,不是从0开始

NF  读取的一行文本的列数

NR  文件的当前行数


使用:

下面所有的栗子都围绕test.txt。

test.txt 文件内容为:

Linux - Sysadmin
Databases - Oracle, MySQL etc
Security - Firewall, Network, Online etc.
Cool - Websites


1,

awk '{ print $1}'  test.txt

打印以空格做为分隔符的每一行的第一列


2,

awk -F'-' '{print $2}'  test.txt

打印以"-"做为分隔符的每一行的第二列

如果把awk程序放在文件中print2line.awk

BEGIN {
FS="-"
}
{
print $2
}

执行方式为:awk -f print2line.awk  test.txt     

运行结果为:

 Sysadmin
 Oracle, MySQL etc
 Firewall, Network, Online etc.
 Websites


3,

awk中使用if

awk -F'-' '{ if ($2 == " Sysadmin") print $2}'  test.txt   //注意Sysadmin前面有个空格

输出为: Sysadmin


4,awk中使用正则

awk -F'-' '{ if ($2 ~ "Sysadmin") print $2}'  test.txt     //注意Sysadmin前面没有空格

输出为: Sysadmin


5 awk中使用循环,(for while do…while)

awk '{for (i=1;i<=3;i++) print $i }' test.txt           //可以看到每次print都会输出一个换行

输出结果:Linux
-
Sysadmin
Databases
-
Oracle,
Security
-
Firewall,
Cool
-
Websites


6 awk中进行算术运算,比如打印awk总共执行了文件的多少行

BEGIN {
x=0
}
{
x=x+1
if ($12>0) {
 print $12" " NR
}
}
END {
print "there is "x" line"
}


7 awk中还可以包含数组

myarr[1]="one";

myarr[2]="two";

for(x in myarr){

print myarr[x]

}


8 awk中使用shell变量

在shell脚本中,有个变量readarg

awk调用时:awk -v pat="$readarg" '$1 ~ "linux"{print $1;print $2}'  test.txt //注意,当有多个命令同时执行时,可以使用分号分开,如果多条命令是同一个条件满足才执行,则需要用{}括起来。


9 shell中使用awk的输出变量

myvalue=`awk -F "-" '{if($1 ~ "Linux") print $1}' test.txt`

注意awk和最后一个符号,是数字1左边那个按键。

执行 echo $z,输出为Linux


原创粉丝点击