Shell编程学习之awk


awk是一种样式扫描与处理工具

1、首先先看下awk的参数

[www.bkjia.com@bkjia ~]# awk --hlep
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:          GNU long options:
        -f progfile             --file=progfile
        -F fs                   --field-separator=fs
        -v var=val              --assign=var=val
        -m[fr] val
        -W compat               --compat
        -W copyleft             --copyleft
        -W copyright            --copyright
        -W dump-variables[=file]        --dump-variables[=file]
        -W exec=file            --exec=file
        -W gen-po               --gen-po
        -W help                 --help
        -W lint[=fatal]         --lint[=fatal]
        -W lint-old             --lint-old
        -W non-decimal-data     --non-decimal-data
        -W profile[=file]       --profile[=file]
        -W posix                --posix
        -W re-interval          --re-interval
        -W source=program-text  --source=program-text
        -W traditional          --traditional
        -W usage                --usage
        -W version              --version

To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.

gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.

Examples:
        gawk '{ sum += $1 }; END { print sum }' file
        gawk -F: '{ print $1 }' /etc/passwd

2、学习awk的内置变量

变量 功能 默认
NF 当前记录中的字段个数,代表列号  
NR 读出的记录数,代表行号,从1开始  
FS 输入字段分隔符 默认是空格 空格或者tab
RS 输入的记录他隔符默 认为换行符 换行
OFS 输出字段分隔符 默认也是空格 空格或者tab
ORS 输出的记录分隔符,默认为换行符 换行

3、打印第一列,并显示行号

[www.bkjia.com@bkjia ~]# awk -F : '{print NR,$1}' 1.txt
1 root
2 ROOT
3 bin
4 daemon
5 adm
6 lp 

4、打印第一行放倒数第二行,显示行号

[www.bkjia.com@bkjia ~]# awk -F : '{print NR,$1,$NF-1}' 1.txt
1 root -1
2 ROOT -1
3 bin -1
4 daemon -1
5 adm -1
6 lp -1

5、显示以5的倍数行号的打印

[www.bkjia.com@bkjia ~]# awk -F : 'NR%10==5{print NR,$0}' /etc/passwd
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
15 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
25 avahi:x:70:70:Avahi daemon:/:/sbin/nologin
35 squid:x:23:23::/var/spool/squid:/sbin/nologin

6、显示除5倍数行号以外的打印

[www.bkjia.com@bkjia ~]# awk -F : 'NR%10!=5{print NR,$0}' /etc/passwd

7、显示第一行到第三行,并使用$0打印显示的行

[www.bkjia.com@bkjia ~]# awk -F : 'NR==1,NR==3{print NR,$0}' 1.txt
1 root:x:0:0:root:/root:/bin/bash
2 ROOT:x:0:0:root:/root:/bin/bash
3 bin:x:1:1:bin:/bin:/sbin/nologin

8、查看以root开头,并打印出第一列

[www.bkjia.com@bkjia ~]# awk -F : '/^root/{print NR,$1}' 1.txt
1 root

9、查找第一列2个字符的用户,打印出来

[www.bkjia.com@bkjia ~]# awk -F : '{if(length($1) == 2) print NR,$0}' 1.txt
6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  • 1
  • 2
  • 下一页

相关内容