0%

awk命令使用

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 指定命令的来源文件

模式动作

格式如下:

1
'pattern { action }'

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,沟通交流。