|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- H$ |8 Z* `1 n; C1 d$ A
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
5 L( v6 g& }5 l/ ]# R
& Z& ?. M) S( s- l& X之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
# m5 K8 E* H1 S i
6 l6 ]5 B; O4 T' Z% i, t6 h& c# V! w( s- Q& Q6 _8 n7 e8 _
! |3 T2 Q/ ?* @2 r# v语法8 F, b7 @6 X% H- P* k
) p2 w) U1 ~9 b/ g2 iawk [选项参数] 'script' var=value file(s)
' ]: ~" M0 y# L* a+ L3 _- i+ h0 D2 E$ D- F
或7 D/ E. P K# O+ A* `
* q& N, V, C9 o- U) D' X
awk [选项参数] -f scriptfile var=value file(s)7 ^# }9 c8 x$ S+ u s) U
: \6 w( o0 ~: R4 O# e
% L3 R5 e( d) Y; w1 v; A* e* G: ?3 {$ n
选项参数说明:
% }9 c+ L/ c% }* ^, e7 q9 F$ q2 j
( q$ L! e0 {. X* y) P-F fs or --field-separator fs' M9 C; K9 | g
o% i" f) u; e9 D1 Z
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。' f7 G) {/ r- V& J, W. x
. Q% \9 O! Q& h( U6 n-v var=value or --asign var=value0 o) W* r6 g" s# U4 u' t
7 C1 P3 H$ H5 E# Z; _( S' H2 U赋值一个用户定义变量。
$ z, T0 o$ ?3 T: ?! @+ t( Z9 X1 G8 S4 d
-f scripfile or --file scriptfile8 s3 q9 B! b' H& E( t) |1 a
7 p' r& b0 w+ ~! B: Q8 ?3 [! {
从脚本文件中读取awk命令。+ h8 i4 p& d+ d; _5 P; F: X% p5 X
5 u9 q3 Q: H7 F- s5 R3 k" z-mf nnn and -mr nnn
3 [. e$ r3 O+ R T& M2 T8 d2 e1 l# ~( S: m
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
6 v6 Q1 R6 K" ~% ]
7 h0 @& Q# X5 e& o-W compact or --compat, -W traditional or --traditional7 C& h+ i, h. ~, m% J4 y$ I4 m
8 B# w( R5 Q4 j4 `- F6 g
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。( ]' m, E1 e- R1 O7 d
( C8 O H. Q; d5 F0 N
-W copyleft or --copyleft, -W copyright or --copyright
, h8 I$ {8 G3 u* V
4 \( L- w/ z' P: d打印简短的版权信息。
: M" f! O; ~" j" j( [$ I) U: A4 A l% D
-W help or --help, -W usage or --usage: l$ f& `* j* U. a+ |; O8 A
, J$ R; K3 H) F( s: ~) d% B
打印全部awk选项和每个选项的简短说明。
) x" d* Q3 I0 k7 z7 g F
) H& J9 s* q( |* X6 |5 A) ?% ~2 y-W lint or --lint
{' S' R: \) ?* |% Y, T* g2 M* E& J* r* |. G( U) N2 S
打印不能向传统unix平台移植的结构的警告。
' W7 O: Y" _& q- f4 y U
! Q6 S$ t: i* c! W-W lint-old or --lint-old
- c6 _+ g* E. M6 s" D- S
H3 ]$ T( @) c; f4 E2 u2 v U: a打印关于不能向传统unix平台移植的结构的警告。, v* a. j) q' {) N
1 E8 }* @/ t O. E
-W posix
3 e0 [" W% s6 Q' F: g9 J( ~5 }6 r3 K; V) b* {+ u6 C3 U
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。, r( G& ]% k. K
) |) _* m i1 L5 K8 L-W re-interval or --re-inerval
! k# s. m! Q t7 b2 r
/ r1 ?- N4 C/ A4 u, m: _+ _允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
" ~' B8 y+ D g3 R) m
: _$ ^" Z5 v9 `- E3 R-W source program-text or --source program-text; Y' j# V1 l8 X( P, c: I- Z8 H! l$ k
2 ~& O4 Q& \+ N. F* p8 T使用program-text作为源代码,可与-f命令混用。6 a, V9 w! }' ^9 Q1 v
3 H1 M8 r$ i& L! U! {5 k6 O-W version or --version+ L( l; w/ o* o2 W6 Q% z% P# q
! v9 V3 W1 h2 `0 Q$ n6 p0 ]; D, }
打印bug报告信息的版本。% p( d. R7 l' n& I% ]5 I" I
7 v! f; r2 _7 `( s. ?# B5 G
& v; H9 \' F; @! K2 G# {1 ?, x
) B0 g. f: I' x* Z) X. r4 _- A基本用法
% ]7 ]0 _& H( z. X( c$ s/ {4 G7 ]$ I0 T) R6 v7 O5 h
log.txt文本内容如下:
& O; a& V. ]3 b% j8 K$ r2 [) e
. h& V: T; h5 ?7 w) q* ]2 this is a test2 |# B, {: {, k% M
3 Are you like awk
( M0 }7 U2 c7 J) Z XThis's a test4 [# g9 i( Z% @5 ?- o- F5 d% F {
10 There are orange,apple,mongo
7 M9 b4 B3 V1 j, j8 m' a
' P5 s0 G% F& L$ B7 [, G
6 ?6 q8 q% k1 b+ K$ j" c( |7 i1 d用法一:/ l- F& K& l2 }* t, h* j
# W3 l& [! e# v8 p! Oawk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号/ u4 G: s8 w/ Q' E
" o3 v- e8 B/ u- I, u( Y8 a8 F/ J6 b3 u7 q5 e* w5 S4 \
实例:
' @4 a) D( H, L4 b% _
! Q9 \+ T* L% a# 每行按空格或TAB分割,输出文本中的1、4项
) B0 f: q" ?9 m; Z+ \. Z+ V $ awk '{print $1,$4}' log.txt0 r9 I& V1 Z. }" P. w9 f, Y
---------------------------------------------
" y3 g' }4 u5 P% P0 T 2 a
/ k, W" r J, L8 K; S! J 3 like. d. R; D& s6 ^- S' G5 ~9 a7 w
This's
& z+ e5 L: I, l+ u9 ] 10 orange,apple,mongo6 Q V+ I( C/ `! A6 s; X4 i
# 格式化输出9 T& H9 p3 h J" q) b5 e1 ]
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt }" v2 n$ F" f5 k7 H
---------------------------------------------9 x+ I- y& g: ^
2 a
3 [# ^( v. u& w3 g, R, v0 u6 ~ h 3 like
9 H: s+ \5 C6 ~( I s- w This's
' g$ ?+ C' B( k* ]) C3 m 10 orange,apple,mongo
9 l2 [' D* g: z9 T& D) ^9 E - @3 _+ ~6 e+ P4 V' X- V
$ ^( I! I; E. J( y& ^8 H用法二: v: x7 X. A1 Z+ b+ t& d* }
0 V8 v" x% e$ P. |' K
awk -F #-F相当于内置变量FS, 指定分割字符) q% g1 f" @2 @) E/ f4 k% u5 l& g& ]
7 l4 m+ H* g% h, g S
f6 s) E# Z! H2 O, B6 f3 I5 q) g1 |实例:
$ ~! B! F1 x0 _
& [! w; s% K, g, g$ ?7 j4 b# 使用","分割
. O4 M% n+ U! w3 |" g! |" p $ awk -F, '{print $1,$2}' log.txt8 O4 ?: o$ B5 S( K7 R+ B6 R7 |
---------------------------------------------
3 w1 E0 R4 W1 m) [+ q 2 this is a test8 V8 m7 p* z3 J% _1 ~. G
3 Are you like awk
. w7 W( {+ k# C, W/ ]* ]* @ This's a test) H9 F2 Z2 U" s; G) k. C
10 There are orange apple7 B+ J( E7 ]* t& k
# 或者使用内建变量
+ \) O- B) ]2 H4 f, U4 X $ awk 'BEGIN{FS=","} {print $1,$2}' log.txt' e. `9 j! n3 h3 J( L
--------------------------------------------- k. H* U8 @2 k
2 this is a test: t* ~$ f% W$ A
3 Are you like awk3 o7 v' t5 r: ]8 D! U, Q! D
This's a test* ^# Y2 k& K. C
10 There are orange apple7 {8 G+ ~& r- b- n* f
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
) [0 j) D, w1 {" b) m $ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
2 B# f0 x3 ]" U! e/ I) C5 m% @/ l" P ---------------------------------------------: G' t0 {: j6 { j
2 this test
( ~4 n0 p6 R' r5 Q0 U4 e L9 ] 3 Are awk
- W4 B, u& p1 U1 ~, b9 x This's a
) E7 Z" x5 _$ F. Q. p 10 There apple
& ]/ f l) y* B" o. n, M' F$ u1 }6 ^6 H; C5 o5 K; M
! p) K7 w; i2 R
0 H& S! d! \) A7 T用法三:& k# x' y% P( B9 V% T
& N5 w# ?) V4 ]awk -v # 设置变量
+ l& W) K- h- {8 R+ l2 |: b; o J. B$ e( ? [3 D
# |8 R/ K, ^% X+ k: {7 a+ m- B
实例:
! Z1 q6 j- U, o8 R* B" {0 e2 h; C0 {9 V
$ awk -va=1 '{print $1,$1+a}' log.txt
, m- L5 E: \, p) ]8 {- x! N ---------------------------------------------
. j3 C& z' p2 K5 @ 2 3" {1 ~& T& x% c, o/ E% q! s f
3 4
7 ?& T0 ?( d* F6 f9 E3 c6 W) W This's 1
' U4 Q( c3 H P. X 10 11* `, F0 q* v$ P3 i! F5 y7 @
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
7 y9 }3 c9 @% |6 `3 O7 Y' i ---------------------------------------------; N; |9 }+ U( I7 C
2 3 2s
7 S/ a5 V7 T' w7 N/ |/ k/ o' |2 A1 r# A 3 4 3s
' v. g& \ n! Y3 d( M7 o This's 1 This'ss2 j9 J& H+ B. t/ _ e P& H8 }
10 11 10s
+ x2 S4 F! y2 V2 }3 Y& B* V: {4 p
, M! A( n: r7 j用法四:
- f! K& I, C' b2 b
0 C: Z1 O1 m) i" f1 A9 }# tawk -f {awk脚本} {文件名}! c! _( n6 h' _; J$ N% n
) E3 q. D5 S8 o. T, Y
2 x5 ^( b/ E2 E% L* h实例:
! u5 |/ |* H+ n) m; h+ ^$ Y: C( }' w' q
$ awk -f cal.awk log.txt, s0 U) b& \, f
运算符
: k. M: ?2 p) u# E运算符 描述+ @+ H8 V# o) v0 ~9 M1 }& e
= += -= *= /= %= ^= **= 赋值/ ?% q( I. A" @8 d ]
?: C条件表达式
8 G7 v; B9 g/ K1 I5 }, u1 a|| 逻辑或
4 p, C2 X' C- I6 E; g4 p&& 逻辑与. r( Q2 m. p. E( O
~ 和 !~ 匹配正则表达式和不匹配正则表达式! b' ]: @" l- n6 J$ s) N
< <= > >= != == 关系运算符! T% G; f( s# J, ^
空格 连接
& Y6 `9 w7 b8 Y+ - 加,减
/ G' E5 v# G3 U1 ?+ W: v+ p2 C% q* / % 乘,除与求余
% V. ?* N, w; H2 y& O4 k+ - ! 一元加,减和逻辑非
! Y, B1 r4 t' f }, U: F( f( q% P^ *** 求幂
6 @' f) O6 q T) X ^: Y: w6 Y++ -- 增加或减少,作为前缀或后缀' t v) z5 S1 F
$ 字段引用
: \1 m1 ?: m I: o7 kin 数组成员
; v& y7 a/ P, D( ?. \" P4 J过滤第一列大于2的行
3 R3 d! O/ U" k4 `7 k8 X! E+ l6 V% T( ^* s: l6 J7 _" ~
$ awk '$1>2' log.txt #命令' F _' h. Z: n! u
#输出
7 ^* P6 p/ O; {" C( p6 G3 Are you like awk$ a, x4 t8 i2 g, `0 ^5 I( c; x7 Q
This's a test9 i1 Q/ M4 j* m6 O
10 There are orange,apple,mongo
! m: L, d$ J' K P, P过滤第一列等于2的行
" \, j5 N9 N: x; \/ p" {
% }# l( R. M; {# e$ awk '$1==2 {print $1,$3}' log.txt #命令: J! O& ^1 I8 r+ ^ v/ X
#输出
- @' J# U3 k- X3 o: a2 is5 x! V8 N/ s- \! V+ x; S
过滤第一列大于2并且第二列等于'Are'的行
( p# X; y5 h- M# G5 w6 H- M
i4 \- }0 ]& p$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令& o0 t5 j( t8 q; F& [2 L
#输出$ p2 y- ?8 H, \" B: ]4 g4 u/ D
3 Are you0 x1 q: K4 ^1 i. ^
内建变量" p/ @. v" `# K
变量 描述
: D' p- G& @! V& J$n 当前记录的第n个字段,字段间由FS分隔
1 z, b0 m" U+ N4 Q. j+ k$ I$0 完整的输入记录
# }& w8 D- r2 O4 N2 CARGC 命令行参数的数目
/ j7 C! g' A- j' t0 X" O2 g. E" VARGIND 命令行中当前文件的位置(从0开始算)9 `, y6 t2 c( H2 s
ARGV 包含命令行参数的数组. c& F1 x6 H/ }
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
+ E. l8 \/ A& zERRNO 最后一个系统错误的描述
# o; k! B/ C) }' @! @0 ^% D+ Z9 CFIELDWIDTHS 字段宽度列表(用空格键分隔); {+ i; W& P" }* @
FILENAME 当前文件名/ W7 N2 ?1 F; r" I; ]
FNR 各文件分别计数的行号" H% z3 i% \; c0 U, Q; x
FS 字段分隔符(默认是任何空格)4 s. d7 P9 ~0 S( Q! @+ m
IGNORECASE 如果为真,则进行忽略大小写的匹配9 @3 k/ W0 b1 s
NF 一条记录的字段的数目
4 Z0 q2 Y* Y" h/ t% B% @NR 已经读出的记录数,就是行号,从1开始6 `; w4 B( b5 `' ^& Z+ w
OFMT 数字的输出格式(默认值是%.6g)7 s& J% ?( p+ g2 w7 s+ d& s# N, A
OFS 输出字段分隔符,默认值与输入字段分隔符一致。
1 f* `1 S# n# S- G6 H( R9 d/ n, gORS 输出记录分隔符(默认值是一个换行符)
( C5 v) ~9 L4 k) O/ NRLENGTH 由match函数所匹配的字符串的长度
8 P; J0 ~" i% eRS 记录分隔符(默认是一个换行符)
- ? v) f0 j6 ~3 G4 cRSTART 由match函数所匹配的字符串的第一个位置
$ u0 i6 V6 Q: [SUBSEP 数组下标分隔符(默认值是/034)7 j7 y" ]4 `9 r- N6 @0 k3 ?
$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' log.txt9 D1 V7 r, p! V& a% ~% `; \
FILENAME ARGC FNR FS NF NR OFS ORS RS
) C! j9 o2 o! \* C9 g2 t---------------------------------------------
) C. q2 ]1 n$ m. b. Xlog.txt 2 1 5 1
1 k% C3 k0 H, ^3 @log.txt 2 2 5 2
0 `) I& v+ c# k' `0 I* Plog.txt 2 3 3 3) B: `# Q% R5 O4 f# {* u5 Q0 ^, ^
log.txt 2 4 4 4
" a2 D+ Z# Z. s' p$ awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' log.txt( K. g& D4 t& I7 R/ q" C
FILENAME ARGC FNR FS NF NR OFS ORS RS
; |% C- ^6 c: X7 S2 a# M7 [---------------------------------------------3 ]/ }2 H0 m( ^/ J4 T3 e) @
log.txt 2 1 ' 1 19 N5 m+ N7 L" Q8 E6 @
log.txt 2 2 ' 1 2
Q; u$ v4 t$ j( b! A; }log.txt 2 3 ' 2 3
& ?- s/ L. a8 Clog.txt 2 4 ' 1 4
) Q/ ^8 Y, |2 j6 ?! G; |6 E# 输出顺序号 NR, 匹配文本行号7 L7 N5 d! G' j1 w. T8 [. f# V
$ awk '{print NR,FNR,$1,$2,$3}' log.txt
S! j1 n) _+ S3 B7 @! v+ ~---------------------------------------------' Z6 m u7 r! X( U/ ?
1 1 2 this is- x9 x( K# W. i
2 2 3 Are you
6 Z- {: p0 X: G6 d8 i% c$ i3 3 This's a test
2 }. l, N; ^+ D5 |& P( o4 4 10 There are
/ k o, Q6 U6 q. c } F& M# 指定输出分割符* I a+ s" U4 B$ P' [' ^
$ awk '{print $1,$2,$5}' OFS=" $ " log.txt0 X o# b9 Y/ U" O2 a
---------------------------------------------
6 [+ V, L, b; Z( j' f0 X' K2 $ this $ test
! I. L+ e+ I0 t; U3 $ Are $ awk8 q7 }) U, W' h$ v0 u* l2 S
This's $ a $
5 N: |. X' z9 E K10 $ There $ W2 y5 k1 l* R8 ^2 i9 y( A
使用正则,字符串匹配
( a) Z0 Q5 ?3 J4 v4 D: j# 输出第二列包含 "th",并打印第二列与第四列
3 k# i2 F! ^% O+ f4 Z$ awk '$2 ~ /th/ {print $2,$4}' log.txt/ j5 D3 P* [/ N
---------------------------------------------. u' V; |. E) U
this a
* @+ l/ X4 v$ R3 i- b2 b' s~ 表示模式开始。// 中是模式。+ C- c( @% B9 v3 [& J: [3 h
2 n/ ]$ C/ I( f3 C- R7 }# 输出包含 "re" 的行
% o, m) N0 z% Y* x+ ^$ awk '/re/ ' log.txt
5 O2 _8 f4 F/ k) D% C' f, c---------------------------------------------8 l! h: C9 ~6 x% Z: e) p
3 Are you like awk
: m- c& K& t; T, v10 There are orange,apple,mongo
% p5 Z/ x8 O' F# L& ]* F忽略大小写
! l% p/ M- X4 b- ^# @$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
7 T( N4 K% {# F* @6 q. L: X/ C---------------------------------------------3 y0 Y6 u; a' k2 H7 _
2 this is a test
5 b/ V1 J1 }. I4 C( v3 g9 jThis's a test% Z. r. m/ r1 H
模式取反9 _ n2 e* i, c7 g: f
$ awk '$2 !~ /th/ {print $2,$4}' log.txt" ]6 T' `) Z: ?+ I( f1 K, \0 |, S
---------------------------------------------5 p. D: x; E% f) t+ W% z
Are like' S- v5 D5 F8 k9 b2 l; U
a* ^# B3 y3 B) d6 X
There orange,apple,mongo
# L0 _* T& u4 w% l' _$ awk '!/th/ {print $2,$4}' log.txt
`; w. P3 k* u6 N# Y( F---------------------------------------------
% N9 u/ h) X: n0 zAre like; Q/ e- O9 p7 h& Q' o9 a
a( H% |* n# v7 n7 D4 _
There orange,apple,mongo4 X2 h' i: i- l* J
awk脚本4 a; }- T: v( d! H1 D$ L
关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。) [3 `- {8 F1 s0 R0 x; w
. S" l0 ?7 |2 z1 X: |! u8 I& a
BEGIN{ 这里面放的是执行前的语句 }
: Z/ m5 L4 o ]5 JEND {这里面放的是处理完所有的行后要执行的语句 }
/ d! h/ F0 e( M; `{这里面放的是处理每一行时要执行的语句}
& o7 X* v/ {* ^0 K假设有这么一个文件(学生成绩表):
# H/ |8 C2 V, O5 i5 L! x! X7 _0 |7 O$ w. k
$ cat score.txt5 G3 ?( Z( A+ U) ^- }! E
Marry 2143 78 84 77
" g8 B" s) W) ^" W6 d3 J" [+ iJack 2321 66 78 45
, W6 [$ m$ i9 H6 XTom 2122 48 77 71
/ U) \4 d! _/ Z* Y6 o6 kMike 2537 87 97 95
3 c& Z p0 z$ Z0 m0 NBob 2415 40 57 62- j2 Z; S# P8 F
我们的 awk 脚本如下:
/ W5 q, J8 k2 F6 b, \6 [4 y6 r" F. C* q! }& n# ]
$ cat cal.awk
: _7 N( B* C2 n) w M2 e#!/bin/awk -f. A) B+ R) r* k6 B
#运行前7 [' O3 Q& w% W
BEGIN {4 a l" @1 S a( W- q
math = 0, d( \& Y; }1 p5 t
english = 03 O+ D- h3 B$ [, E
computer = 08 G) d0 g/ o* Y0 F
3 r& M8 [* {; `" B, l5 O
printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
5 t. g* ~% t0 S; [6 q% ]7 V$ H printf "---------------------------------------------\n"1 B# H) f( O; q3 d( h
}
$ S, \: Q7 z/ c4 M2 q$ B8 K#运行中
1 `3 `& z: r+ z2 R: [{* |! J4 G3 Z: W% R
math+=$3
6 r( \' s& D8 Z/ [" s/ t' f english+=$4
1 q& J3 r) d& b computer+=$5
8 F X4 [ H" ~ q3 k' P2 l; L printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
8 f0 F$ ?: L5 P0 r" F+ y+ q9 F6 a}
' }+ V n9 V: Q# [#运行后+ M5 O" M& j) x3 ~ n
END {$ b2 D+ \7 f: h2 u5 L$ _
printf "---------------------------------------------\n"& v/ H! e& D- d* Q! x4 N- V: T
printf " TOTAL:%10d %8d %8d \n", math, english, computer# s8 f1 {4 V4 f0 ^% g v
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
& v1 V7 c, S' d) W3 e; T}& ]" C/ _; Z% O$ ?7 l: I0 ~" o
我们来看一下执行结果:# V, y+ \+ ~' q/ e) Z" z. \) l9 m7 ]
7 }- i1 c# i+ ~2 p- M$ awk -f cal.awk score.txt7 |) w+ R9 f! i( V6 ^
NAME NO. MATH ENGLISH COMPUTER TOTAL
9 V7 @2 Q6 I4 K# n3 l---------------------------------------------
# b- F* e, `* I5 C8 VMarry 2143 78 84 77 239( T0 w- e9 I# N1 E# Y
Jack 2321 66 78 45 189
* m) `. M2 R5 Y9 lTom 2122 48 77 71 196
$ |* S ]$ Z3 _# U% j4 dMike 2537 87 97 95 279
# I5 Q2 O" |4 \2 T. IBob 2415 40 57 62 159
8 H* ?5 o* g2 V: u9 c---------------------------------------------
+ L n8 ]; U' F3 }2 } TOTAL: 319 393 350
) K6 h$ m5 N! c' }9 x9 W2 P5 {7 z" k! \AVERAGE: 63.80 78.60 70.002 S, e9 M: O3 E- \4 \' W) L
另外一些实例7 P# c3 X% l5 R# e3 _% o
AWK 的 hello world 程序为:1 }0 I& f6 X6 z8 D
5 a8 B5 R( x4 A( z+ F3 uBEGIN { print "Hello, world!" }% H \, |# m$ n( [, F. l
计算文件大小
. @7 L. L3 K s2 R* {/ F
* L R( K2 ]! n* g2 R: l$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
3 v0 v% e' c4 ^ @: F- d6 g--------------------------------------------------
5 I5 W7 f* R5 Y% G: h1 C: Y666581* P# |# S4 t5 C- s, V: J$ Y, U
从文件中找出长度大于 80 的行:% `0 B* _% Z+ g. b# A
/ o1 \5 I9 G) }' `' u. Z' _
awk 'length>80' log.txt5 G6 r0 e) a5 [: u
打印九九乘法表! L- W" t! A- X+ {6 T1 S: ~) Y# G
/ u# j$ T. t% U0 X+ V* Q/ `1 P
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}', Z! W/ p% z) y9 H
|
|