awk的使用

179 阅读2分钟

awk是一个用于模式匹配和处理的语言,有相应的语法。

概要

awk OPTIONS PATTERN_ACTION files

和grep、sed差不多都是这样的格式。 指定awk通过文件读取内容,每一行都根据模式作匹配,然后作相应的动作。

选项

-Ffs 指定分隔符为fs, 默认是空格/tab
	awk -F":" '{ print $1 }' /etc/passwd
-v val=value 设置变量val的值
	awk -v count=10 'BEGIN{print "start ", count} /this/ {count++;print $1 $2 $3} END{print count"lines"}' aw
-f file 指定命令的来源文件

模式动作

格式如下:

'pattern { action }'

A missing { action } means print the line; a missing pattern always matches.

action是一系列的语句, 类似C语言的语法。 可以调用内置的函数 比如 length, 还有条件语句、循环语句。

awk ' { if(length > 10) print NR}' file // 输出满足条件的行

可能的语句形式


	if( expression ) statement [ else statement ]
	while( expression ) statement
	for( expression ; expression ; expression ) statement
	for( var in array ) statement
	do statement while( expression )
	break
	continue
	{ [ statement ... ] }
	expression              # commonly var = expression
	print [ expression-list ] [ > expression ]
	printf format [ , expression-list ] [ > expression ]
	return [ expression ]
	next                    # skip remaining patterns on this input line
	nextfile                # skip rest of this file, open next, start at top
	delete array[ expression ]# delete an array element
	delete array            # delete all elements of array
	exit [ expression ]     # exit immediately; status is expression


语句指定由分号、换行符或者括号分隔。

一个空的语句,代表整行 $0。字符串用双引号包含着。

还支持运算符运算。

变量可以为常量、数组或者域。 默认被初始化为null 字符串。数组元素可以是字符串,而不必须是数字。数组还指出多维下标。

 echo | awk 'BEGIN{s[3,2,5]=100; {print  s[3,2,5]}}'

print函数可以输出内容到标准输出, 也可以输出到文件 > / >> 或者管道。

有些全局的,而不是针对行的动作, 可以通过BEGIN和END块来执行。


netstat | awk '/^tcp.*keep/'


后话

至此, 终于把linux命令三剑客粗略的过了一遍。使用的时候再查一下,达到会基本使用的地步了。Great!


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei

github博客: fishmwei.github.io/