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