awk '条件类型1 {动作1} 条件类型2{动作2}...' filename
最基本的用法是取一行当中的某个字段
who | awk '{print $1 "\t" $3}' #列出第一个和第三个字段, 在每一行的每个字段都是有变量名称的,那就是 $1, $2等变量名称。$0代表一整行数据的意思。
awk的内置变量:
NF (number of field)每一行拥有的字段总数
NR (number of row)目前awk所处理的是“第几行”数据
FS ( 缩写是?) 目前的分隔字符,默认是空格键
条件类型中所用的逻辑运算符:
>, >=, <, <=, ==, !=
示例:列出/etc/passwd文件中第三列小于10能下的数据,并且仅列出账号与第三列
$ cat /etc/passwd | awk ' {FS=":"} $3 < 10 {print $1 "\t" $3}'
output:
root:x:0:0:root:/root:/bin/bash
daemon 1
bin 2
sys 3
sync 4
games 5
man 6
lp 7
mail 8
news 9
第一行没有正确显示出来,是因为读入第一行的时候,那些变量$1, $2...默认还是能空格键为分隔的,所以第二行分隔符才生效。
解决方法,预先设置awk的变量,利 用BEGIN关键字即
$cat /etc/passwd | awk 'BEGIN{ FS=":"} $3 < 10 {print $1 "\t" $3} '