AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk )
在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定 内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
尽管操作可能会很复杂,但命令的语法始终是:
awk '{pattern + action}' 或者 awk 'pattern {action}'
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
一、 awk命令行,你可以象使用普通UNIX命令一样使用awk,在命令行中你也可以使用awk程序设计语言,虽然awk支持多行的录入,但是录入长长的命令行并保证其正确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shell script程序中引用awk命令行甚至awk程序脚本。
二、使用-f选项调用awk程序。awk允许将一段awk程序写入一个文本文件,然后在awk命令行中用-f选项调用并执行这段程序。具体的方法我们将在后面的awk语法中讲到。
三、利用命令解释器调用awk程序:利用UNIX支持的命令解释器功能,我们可以将一段awk程序写入文本文件,然后在它的第一行加上:#!/bin/awk -f 并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。
awk -F : '{print $1}' passwd
awk -F : '{print $2}' passwd
awk -F : '{print $1$2}' passwd
awk -F : 'BEGIN{print "hello"}{print $2}' passwd
awk -F : 'BEGIN{n=1}{print $2,n}' passwd
awk -F : 'BEGIN{n=1}{print $2,n++}'
awk -F : 'BEGIN{n=1}{print n++,$1}' passwd
awk -F : 'BEGIN{n=1}{print n++,$1}END{print "over"}' passwd
awk -F : 'BEGIN{n=1}{print n++,$1}END{print NR}' passwd
awk -F : 'BEGIN{n=1}{print n++,$1}END{print NF}' passwd
awk '/bash/{print}' passwd
awk -F : '/bash/{print}' passwd
awk -F : '/bash/{print $1}' passwd
awk -F : 'NR==3{print $1}' passwd
awk -F : 'NR==3{print}' passwd
awk -F : 'NR>=4&&NR<=6{print}' passwd
awk -F : 'NR>=4||NR<=6{print}' passwd
awk '{print FILENAME}' passwd
awk -F : '/^ro/{print}' /etc/passwd
awk -F : '/bash$/{print}' /etc/passwd
awk -F : '/bash$/{print $1}' /etc/passwd
awk '/^[a-d]/{print}' /etc/passwd
awk '/^[^a-d]/{print}' /etc/passwd
awk '/^r|bash$/{print}' /etc/passwd
awk '/^r/||/bash$/{print}' /etc/passwd
awk '/^r/&&/bash$/{print}' /etc/passwd
awk -F : '$6~/bin$/{print}' /etc/passwd
awk -F : '$6!~/bin$/{print}' /etc/passwd
awk -F : '$6!~/\
awk 'BEGIN{a=12;print a+12}'
awk 'BEGIN{N=0}/nologin$/{N++}END{print N}' /etc/passwd
awk -F : 'BEGIN{N=0}$6!~/^\/home/&&$7~/bash$/{print $1;N++}END{print N}' /etc/passwd
编写脚本实现网卡ip的获取