awk
awk是一个用于模式匹配和处理的语言,有相应的语法。
概要
1
| awk OPTIONS PATTERN_ACTION files
|
和grep、sed差不多都是这样的格式。 指定awk通过文件读取内容,每一行都根据模式作匹配,然后作相应的动作。
选项
1 2 3 4 5
| -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 指定命令的来源文件
|
模式动作
格式如下:
A missing { action } means print the line; a missing pattern always matches.
action是一系列的语句, 类似C语言的语法。 可以调用内置的函数 比如 length, 还有条件语句、循环语句。
1
| awk ' { if(length > 10) print NR}' file // 输出满足条件的行
|
可能的语句形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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 字符串。数组元素可以是字符串,而不必须是数字。数组还指出多维下标。
1
| echo | awk 'BEGIN{s[3,2,5]=100; {print s[3,2,5]}}'
|
print函数可以输出内容到标准输出, 也可以输出到文件 > / >> 或者管道。
有些全局的,而不是针对行的动作, 可以通过BEGIN和END块来执行。
1 2 3 4
| netstat | awk '/^tcp.*keep/'
|
网络上的博客挺完整的 链接
后话
至此, 终于把linux命令三剑客粗略的过了一遍。使用的时候再查一下,达到会基本使用的地步了。Great!
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。