awk
awk '条件 {动作}' 文件名
# 示例
$ awk '{print $0}' demo.txt # 将demo.txt的每一行都原样输出
print 打印
$0 当前行
知识点1:'条件 动作’使用单引号,不能使用双引号
知识点2:$0表示当前行,$1,$2,$3,…,$i表示第1,2,3,i列
为了便于举例,使用/etc/passwd文件进行awk举例
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
这个文件的字段分隔符是冒号,所以要用-F参数指定分隔符为冒号。然后,才能提取到它的第一个字段。
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync
知识点3:-F ‘分隔符’,用于指定列与列之间的分隔符
知识点4:awk常用的内建变量
内建变量 | 含义 |
---|---|
FILENAME | 当前输入文件的文件名,该变量是只读的 |
NR | 当前行的行号 |
NF | 当前行所拥有的列数,因此$NF就代表最后一个字段,$(NF-1)代表倒数第二个字段 |
OFS | 输出格式的列分隔符,缺省是空格 |
FS | 输入格式的列分隔符,缺省是空格和Tab |
ORS | 输出格式的行分隔符,缺省是换行符 |
RS | 输入格式的行分隔符,缺省是换行符 |
打印第一列,最后一列,$ awk -F ‘:’ ‘{print $1, $(NF-1)}’ demo.txt,其中print命令里面的逗号,表示输出的时候,两部分之间使用空格分隔。
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin
知识点5:awk中的条件
awk -F ':' 'NR % 2 == 1 {print $1}' /etc/passwd # 只打印奇数行
awk -F ':' '$3>100 && $3<200 {print $3}' /etc/passwd # 大于小于一个范围
awk -F ':' '$3>100 {count=count+1} END {print count}' /etc/passwd
awk -F ':' '{if ($1 > "m") print $1; else print "---"}' /etc/passwd # awk提供了if...else...结构