awk 命令包括一个模式和由一条或多条语句构成的操作,语法如下所示:
awk '/pattern/ {action}' file
请注意:
awk 测试指定文件中的每个记录是否符合模式匹配。如果找到匹配项,就执行指定的操作。
awk 可以在管道中作为过滤器,如果没有指定文件,它也可以从键盘(标准输入)中接收输入。
一种非常有用的操作是打印数据!下面是如何引用一条记录中的域。
$0 ---- 整条记录
$1 ---- 该记录中的第一个域
$2 ---- 该记录中的第二个域
我们还可以从一条记录中提取多个域,之间使用逗号分开。
举例来说,要提取 /etc/passwd 文件中的第 6 个域,命令如下:
引用:# awk -F: '{print $6}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin
/sbin
/sbin
/var/spool/mail
/etc/news
/var/spool/uucp
注意 -F 是由预先定义的 FS 变量所定义的输入域分隔符。在我们这个例子中是空格。
要从 /etc/passwd 文件中提取第一个和第六个域,命令如下:
引用:# awk -F: '{print $1,$6}' /etc/passwd
root /root
bin /bin
daemon /sbin
adm /var/adm
lp /var/spool/lpd
sync /sbin
shutdown /sbin
halt /sbin
mail /var/spool/mail
news /etc/news
uucp /var/spool/uucp
operator /root
要在域之间使用短横线代替冒号来打印这个文件的内容,命令如下:
引用:# awk -F: '{OFS="-"}{print $1,$6}' /etc/passwd
root-/root
bin-/bin
daemon-/sbin
adm-/var/adm
lp-/var/spool/lpd
sync-/sbin
shutdown-/sbin
halt-/sbin
mail-/var/spool/mail
news-/etc/news
uucp-/var/spool/uucp
operator-/root
要使用短横线作为域之间的分隔符来打印文件,并且只以逆序打印第一个域和第六个域,命令如下:
引用:# awk -F: '{OFS="-"}{print $6,$1}' /etc/passwd
/root-root
/bin-bin
/sbin-daemon
/var/adm-adm
/var/spool/lpd-lp
/sbin-sync
/sbin-shutdown
/sbin-halt
/var/spool/mail-mail
/etc/news-news
/var/spool/uucp-uucp
/root-operator

