现在的位置: 首页 > 综合 > 正文

AWk的调用精华

2017年12月11日 ⁄ 综合 ⁄ 共 2413字 ⁄ 字号 评论关闭

awk 的调用方式
awk 提供了适应多种需要的不同解决方案,它们是:
一、awk 命令行,你可以象使用普通UNIX 命令一样使用awk,在命令行中你也可以使用awk 程序设计语言,虽然awk 支持多行的录入,但是录入长长的命令行并保证其正
确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shell script 程序中引用awk 命令行甚至awk 程序脚本。
二、使用-f 选项调用awk 程序。awk 允许将一段awk 程序写入一个文本文件,然后在awk 命令行中用-f 选项调用并执行这段程序。具体的方法我们将在后面的awk 语法中讲
到。
三、利用命令解释器调用awk 程序:利用UNIX 支持的命令解释器功能,我们可以将一段awk 程序写入文本文件,然后在它的第一行加上:
#!/bin/awk -f

并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk 程序了。

$awk     脚本文本名   处理文件

 

举一个简单的例子:

==[23]==gaoke@dev64_23:~/code$cat host
#ip             hostname     port 
192.168.1.12    gaoke1         45
192.168.1.14    gaoke2         45
192.168.1.15    gaoke3         45
192.168.1.16    gaoke4         45

然后我要进行下边的操作:

(1)获得整个文件的所有行:

==[23]==gaoke@dev64_23:~/code$awk '{print $0 }' host
#ip             hostname     port 
192.168.1.12    gaoke1         45
192.168.1.14    gaoke2         45
192.168.1.15    gaoke3         45
192.168.1.16    gaoke4         45

或者==[23]==gaoke@dev64_23:~/code$awk -F " " '{print $0 }' host
#ip             hostname     port 
192.168.1.12    gaoke1         45
192.168.1.14    gaoke2         45
192.168.1.15    gaoke3         45
192.168.1.16    gaoke4         45

(2)获得整个文件的第一列至第二列的内容

==[23]==gaoke@dev64_23:~/code$awk -F " " '{print "IP:"$1 "\t\tHOSTNAME:"$2}' host
IP:#ip  HOSTNAME:hostname
IP:192.168.1.12  HOSTNAME:gaoke1
IP:192.168.1.14  HOSTNAME:gaoke2
IP:192.168.1.15  HOSTNAME:gaoke3
IP:192.168.1.16  HOSTNAME:gaoke4

(3)再次修改host文件:

==[23]==gaoke@dev64_23:~/code$cat host
192.168.1.12    :gaoke1        :45
192.168.1.14    :gaoke2        :45
192.168.1.15    :gaoke3        :45
192.168.1.16    :gaoke4        :45

(4)再次只获得每行冒号后边的获得的数据

==[23]==gaoke@dev64_23:~/code$awk -F ":" '{print $1 $2 $3}' host
192.168.1.12    gaoke1        45
192.168.1.14    gaoke2        45
192.168.1.15    gaoke3        45
192.168.1.16    gaoke4        45

 

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

当然,你也可以写awk脚本文件来执行它:

==[23]==gaoke@dev64_23:~/code$cat ff.awk
#!/bin/awk -f
BEGIN{
 FS=":"
}
   {print $0}

==[23]==gaoke@dev64_23:~/code$awk -f ff.awk host
192.168.1.12    :gaoke1        :45
192.168.1.14    :gaoke2        :45
192.168.1.15    :gaoke3        :45
192.168.1.16    :gaoke4        :45

==[23]==gaoke@dev64_23:~/code$cat ff.awk
#!/bin/awk -f
BEGIN{
 FS=":"
}
   {print "IP:"$1 "HOSTNAME:"$2 "PORT:"$3}

==[23]==gaoke@dev64_23:~/code$awk -f ff.awk host
IP:192.168.1.12    HOSTNAME:gaoke1        PORT:45
IP:192.168.1.14    HOSTNAME:gaoke2        PORT:45
IP:192.168.1.15    HOSTNAME:gaoke3        PORT:45
IP:192.168.1.16    HOSTNAME:gaoke4        PORT:45

 

抱歉!评论已关闭.