Linux awk

1.介绍

  • awk 是一种编程语言,用于在 linux/unix 下对文本和数据进行扫描与处理。数据可以来自标准输入、文件、管道。
  • awk 分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是 Alfred AhoPeter WeinbergerBrian Kernighan
  • 实际上 awk 有很多种版本,如:awknawkmawkgawkMKS awktawk… 这其中有开源产品也有商业产品。
  • 目前在 Linux 中常用的awk编译器版本有 mawkgawk,其中以 RedHat 为代表使用的是 gawk,以 Ubuntu 为代表使用的是 mawk
  • gawkGNU Projectawk 解释器的开源代码实现。

2.工作原理

  1. awk 逐行扫描文件,从第一行到最后一行,寻找匹配特定模式的行,并在这些行上进行操作;
  2. 命令结构:awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
  • 注意:BEGIN | END 关键词大写

3.命令

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:		GNU long options: (standard)
	-f progfile		--file=progfile
	-F fs			--field-separator=fs
	-v var=val		--assign=var=val
Short options:		GNU long options: (extensions)
	-b			    --characters-as-bytes
	-c			    --traditional
	-C			    --copyright
	-d[file]		--dump-variables[=file]
	-D[file]		--debug[=file]
	-e 'program-text'	--source='program-text'
	-E file			--exec=file
	-g			    --gen-pot
	-h			    --help
	-i includefile		--include=includefile
	-l library		--load=library
	-L[fatal|invalid]	--lint[=fatal|invalid]
	-M			    --bignum
	-N			    --use-lc-numeric
	-n			    --non-decimal-data
	-o[file]		--pretty-print[=file]
	-O			    --optimize
	-p[file]		--profile[=file]
	-P			    --posix
	-r			    --re-interval
	-S			    --sandbox
	-t			    --lint-old
	-V			    --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

4.内置变量

ARGC        命令行参数个数
FILENAME    当前输入文档的名称
FNR         当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR          输入流的当前记录编号
NF          当前记录的字段个数
FS          字段分隔符
OFS         输出字段分隔符,默认为空格
ORS         输出记录分隔符,默认为换行符\n
RS          输入记录分隔符,默认为换行符\n

5.使用

awk的数据字段变量:
    $0表示整行文本
    $1表示文本中第一个数据字段
    $2表示文本中第二个数据字段
    $n表示文本中第n个数据字段

awk的用-F来指定分隔符
    默认的字段分隔符是任意空白字符(空格或者TAB)
    例:awk -F ":" '{print $1,$2}' file_name
    awk -F 分隔符 '/模式/{动作}' 输入文件

6.示例

例1:显示每行的字段数目
#awk '{print NF}' /etc/passwd
(默认分隔符是空白,所以字段数大都是1咯)
# awk -F: '{print NF}' /etc/passwd
(指定了分隔符了,就是7咯)

例2:显示每行的第一字段和最后一个字段
#awk '{print $1,$NF}' /etc/passwd

例3:显示每行的行号和内容
#awk -F: '{print NR,$0}' /etc/passwd

例4:显示第一列和第七列,中间用—隔开
#awk -F: 'BEGIN{OFS="---"}{print $1,$7}' /etc/passwd
简单写法:
#awk -F: 'OFS="---"{print $1,$7}'/etc/passwd

例5:显示符合模式的用户名和所在的行号最后显示总行号:
#awk 'BEGIN{FS=":"}/bash$/{print NR,$1}END{print NR}' /etc/passwd

例6:显示文件的3到5行(带行号,带内容)
#awk‘NR==3,NR==5{print NR,$0}’ /etc/passwd

显示4或7行(带行号,带内容):
#awk 'NR==4||NR==7{print NR,$0}'   /etc/passwd

例7:显示文件的前10行(带行号,带内容):
#awk   'NR<=10{print NR,$0}' /etc/passwd

例8:显示文件的前10行和30到40行:
# awk 'NR<=10||NR>30&&NR<=40{print NR,$0}' /etc/passwd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值