歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell編程學習之awk

Shell編程學習之awk

日期:2017/3/1 10:22:13   编辑:SHELL編程

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 --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.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 -1

5、顯示以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/nologin

6、顯示除5倍數行號以外的打印

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

7、顯示第一行到第三行,並使用$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/nologin

8、查看以root開頭,並打印出第一列

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

9、查找第一列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

Copyright © Linux教程網 All Rights Reserved