1.1 功能说明

一门语言,过滤内容(取列)

1.2 语法格式

awk -F "分隔符号" '{print $1}' 文件

$1第一列  $NF最后一列  $0 取整行

参数

简解

-F

分隔符号

1.3 实践操作

实例1-1   

问题:显示/root/oldboy.txt12行的第12

命令:awk ‘{if (NR>0 && NR<3) print $1” ”$2}’/root/oldboy.txt

代码

awk '{if(NR>0 && NR<3) print $1""$2}' /root/oldboy.txt  

bb aa

oldboy oldgirl

说明:

NR代表行号

&&相当于and,并且

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" "[tab]"

 

实例1-2   

问题:显示/root/oldboy.txt的行号

命令:awk ‘{print NR “ ” $0}’ /root/oldboy.txt

代码

[root@ben-test ~]# awk '{print NR " "$0}'oldboy.txt

1 bb aa cc

2 oldboy oldgirl test

3 test

说明:$0 取行

 

实例1-3   

问题:如何过滤出已知当前目录下/root/data中的所有一级目录(不包含var目录下面的目录及隐藏目录,即只能是一级目录)

命令:ls –l /root/data|awk ‘/^d/’

代码

[root@ben-test ~]# ls -l /root/data |awk'/^d/' 

drwxr-xr-x 3 root root 4096 Oct 21 16:39 test

 

实例1-4   

问题:显示/etc/passwd的账户

命令:awk –F “:”‘{print $1}’ /etc/passwd

代码

[root@ben-test ~]# awk -F ":" '{print$1}' /etc/passwd

root

bin

daemon

adm

说明:-F指定域分隔符为':'

 

实例1-5   

问题:搜索/etc/passwdroot关键字为开头的所有行,并显示对应的shell

命令:awk –F “:”‘/^root/{print $7}’ /etc/passwd

代码

[root@ben-test ~]# awk -F ":"'/^root/{print $7}' /etc/passwd

/bin/bash

 

实例1-6   

问题:如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

命令:awk –F “:”‘{print $1”\t”$7}’ /etc/passwd

代码

[root@ben-test ~]# awk -F ":" '{print$1"\t"$7}' /etc/passwd

root   /bin/bash

bin    /sbin/nologin

daemon /sbin/nologin

adm    /sbin/nologin

说明:”\t” 表示tab键分割