awk是一种用于处理数据和生成报告的编程语言,也就是样式扫描和处理语言。
一般的使用格式是:
awk '{pattern + action}' {filenames}
pattern指在每一行中进行匹配的条件,action指针对符合条件的行进行的操作,filenames是输入的文件名。
例子:
假设data文件中有以下数据:
1 donald 305 20050129
2 chin 102 20040129
3 mark 304 20040229
下面对这个文件进行操作:
awk '{print $1, $2, $3, $4}' data
输出:
1 donald 305 20050129
2 chin 102 20040129
3 mark 304 20040229
awk '{print $1"\t", $2"\t", $3"\t", $4}' data
输出:
1 donald 305 20050129
2 chin 102 20040129
3 mark 304 20040229
awk '/donald/ {print $4}' data
匹配当data文件中包含字符串"donald"的行,输出第4列的值:
20050129
awk '/donald|chin/ {print $1, $2}' data
这里的"|"应该是或的作用,而不是管道,输出:
1 donald
2 chin
awk '/a[rl]/ {print $1, $2}' data
兼容perl的正则表达式,匹配包含"ar"或"al"的列,输出:
1 donald
3 mark
awk '/a[rl]/ {print $1, $2, $3+1}' data
给第三列加上1再输出:
1 donald 306
3 mark 305
awk '/a[rl]/ {print $1, $2} {print $3+1}' data
匹配只对第一对花括号产生作用,输出:
1 donald
306
103
3 mark
305
awk 'FS="n" {print $1}' data
使用"n"而不是空格做为分隔符,输出:
1 do
2 chi
3 mark 304 20040229
awk 'FS="n" {OFS="-"} {print $1, $2}' data
1 do-ald 305 20050129
2 chi- 102 20040129
3 mark 304 20040229-
awk 'FS="n" {OFS="-"} {print NR, $1, $2}' data
使用NR变量,num of row,即行号,输出:
1-1 do-ald 305 20050129
2-2 chi- 102 20040129
3-3 mark 304 20040229-
awk '{x=x+$3} {print NR, $3, x}' data
使用变量进行累加计算,输出:
1 305 305
2 102 407
3 304 711
awk '{x=x+$3} END {print NR, $3, x}' data
使用BEGIN和END在处理之前或之后显示结果,输出:
3 711
awk '{x=x+$3} {print NR, $3, x | "sort -nr"}' data
在awk内使用管道进行排序,输出:
3 304 711
2 102 407
1 305 305
cat command
{x=x+$3}
{print NR, $3, x | "sort -nr"}
awk -f command data
将指定写在文件中,输出:
3 304 711
2 102 407
1 305 305
20100818新增对AWK的理解
测试数据文件内容
cat irs.dat
nisj gbicc shanghai
zhaopeng zhikong changcun
zhouyuefei shanlian hefei
--显示以' '分隔的第二行,第一、二列内容
awk -F ' ' 'NR==2 {print $1,$2}' irs.dat
说明:内建变量FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-F命令行选项修改FS的值。
--匹配含有字符串'zhou'的行
awk '/zhou/{print $0}' irs.dat
--匹配长度大于20的行号
awk 'length($0)>20 {print NR}' irs.dat
注:
print可以改为printf,不过后者不输出换行符。NR:已经读出的记录数,NF:当前记录中的字段个数
关于分隔符,下面两个等效:
awk 'FS="n" {print $0}' data
awk -F n '{print $0}' data
二者等效,以n为分隔符输出
2839



被折叠的 条评论
为什么被折叠?



