awk是一种样式扫描与处理工具1、首先先看下awk的参数[www.linuxidc.com@linuxidc ~]# 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 --versionTo 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/passwd2、学习awk的内置变量
| 变量 | 功能 | 默认 |
| NF | 当前记录中的字段个数,代表列号 | |
| NR | 读出的记录数,代表行号,从1开始 | |
| FS | 输入字段分隔符 默认是空格 | 空格或者tab |
| RS | 输入的记录他隔符默 认为换行符 | 换行 |
| OFS | 输出字段分隔符 默认也是空格 | 空格或者tab |
| ORS | 输出的记录分隔符,默认为换行符 | 换行 |
3、打印第一列,并显示行号[www.linuxidc.com@linuxidc ~]# awk -F : "{print NR,$1}" 1.txt
1 root
2 ROOT
3 bin
4 daemon
5 adm
6 lp 4、打印第一行放倒数第二行,显示行号[www.linuxidc.com@linuxidc ~]# 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 -15、显示以5的倍数行号的打印[www.linuxidc.com@linuxidc ~]# 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/nologin6、显示除5倍数行号以外的打印[www.linuxidc.com@linuxidc ~]# awk -F : "NR%10!=5{print NR,$0}" /etc/passwd7、显示第一行到第三行,并使用$0打印显示的行[www.linuxidc.com@linuxidc ~]# 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/nologin8、查看以root开头,并打印出第一列[www.linuxidc.com@linuxidc ~]# awk -F : "/^root/{print NR,$1}" 1.txt
1 root9、查找第一列2个字符的用户,打印出来[www.linuxidc.com@linuxidc ~]# awk -F : "{if(length($1) == 2) print NR,$0}" 1.txt
6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin