找回密码
 注册
关于网站域名变更的通知
查看: 524|回复: 3
打印 上一主题 下一主题

Linux awk 命令

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-2 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

. w0 ?$ N! D  ?$ e! }; cAWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
8 i: S$ f( I6 m3 f* a! g
, G& G/ \- h8 y4 H+ N之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
* i0 `8 ?; N* j0 [6 b" w
8 t1 U4 x- |3 [# t- w( h1 C( i
) G% O) Z& H( z; R8 `/ i4 l: Q3 }# I9 K
语法
* D9 r4 i. S+ }$ A- [6 t, U2 D8 \. B+ N* v7 s! w
awk [选项参数] 'script' var=value file(s)
8 C/ D% K) n6 j/ x& o! \1 G! ?2 F- G  L3 M* v
, T  }' T$ o. [9 r; y4 _' m$ x& v( r
" R" D1 K9 _6 F5 M) p  g1 F
awk [选项参数] -f scriptfile var=value file(s)
% l: N) f5 F; ?. r9 U& N+ g+ `
6 R5 A# }5 \4 ]4 G9 H' t
3 x$ B4 F) s8 U
% B0 F: C7 x( A* T选项参数说明:) B" |9 D, u( U5 H4 j
, ?5 K5 E0 a: \8 Z" T! |: W" T
-F fs or --field-separator fs
# G# s+ }4 n+ [7 Z0 K3 N0 o% m9 O
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。# V8 R4 `$ A) V
& s+ a1 Q0 L* \% m- {- \+ I2 C
-v var=value or --asign var=value
7 ]+ G1 B% P* ]% C
- ~( F' I5 R7 J3 n8 q( \! z赋值一个用户定义变量。
6 V# I) `' M  e
  R# s$ L$ V; W-f scripfile or --file scriptfile( s% I% H* S0 \( {
, X, \* Z$ ]; E, R3 R& u
从脚本文件中读取awk命令。
# w/ o* S9 P9 c* c$ N# r: `) L( B% t1 a- z- y5 A
-mf nnn and -mr nnn
9 r; Z2 i& t1 q& a, w4 Z3 g, {; Y/ J5 g! a2 j
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。6 k: q7 i; s( u1 ^$ l# Z6 F

3 V' {. ^" x( \4 @-W compact or --compat, -W traditional or --traditional" Q7 I: L1 M3 I- M3 V2 z) [) B

- w0 r: q3 f; E& B在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
7 r' H  u. }2 h
  t4 h! i  Y4 b. a-W copyleft or --copyleft, -W copyright or --copyright
1 k# r  s5 C% Z1 ?9 D: ~% e! y+ V2 F. m" `
打印简短的版权信息。, d9 z; Z1 ?; r" S
% V" Y: \6 E7 I2 c, ^8 r
-W help or --help, -W usage or --usage
) p* h5 d) U) |0 B5 ]! `. u- b+ w( A7 a; X  x! x3 A* b+ o
打印全部awk选项和每个选项的简短说明。1 E& L; O7 Z" b8 ]: ]6 Q1 W
4 @2 `9 |4 |2 K) X# T; c
-W lint or --lint
% u* w9 f/ G6 V3 N1 p8 R! r7 e# s& u' U% E% Z0 @7 i3 l  G, c, ~" z
打印不能向传统unix平台移植的结构的警告。( `7 c% a/ M/ n
* A% @0 S3 S  _
-W lint-old or --lint-old
. G) y# B) p+ u" Y5 o* W% X7 e% O- I
打印关于不能向传统unix平台移植的结构的警告。
  t4 m% [. k0 O! `2 Q/ F
( `0 u$ c" t6 t# Y-W posix& ^& F0 @; Q) l  Y# L" I7 e

/ s7 A+ z& u6 U: _: F; `打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。0 O" ?% [1 d- g$ ]4 j" ~

( V" z- |0 R2 c' L-W re-interval or --re-inerval1 X; E/ C2 \' x2 @8 |3 m
: H" Y  B( ^; [3 [
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。6 R- A1 [. W) t2 d5 c

4 F; P1 p. P' q+ g( Y6 p-W source program-text or --source program-text
: W. o4 X( ?# P7 M3 }; T* f7 m: x/ {' F
使用program-text作为源代码,可与-f命令混用。
( L1 ~3 {" L9 c6 v* R( ^- z
* _) C  Q+ M$ r6 [-W version or --version- A) R2 n: J0 ^" U. p+ o1 H; l2 [  Q. ]
2 V0 W2 d( u3 {9 T. A$ ?  X5 S) p
打印bug报告信息的版本。
- }. f. r* y. Z, K0 C5 N) U, m% i- Q4 j
5 V- n7 p! h: [7 r9 a) L

7 K- L: a0 z/ @2 M7 h) x( A基本用法( w- c9 d; c  E% N( a, l6 W, V3 U
5 K# G( n) x2 e" W) t0 r
log.txt文本内容如下:
/ J. R7 H& }6 q& e4 U  s
+ i2 w) B  i% L( ~; U3 u4 b- S6 L) j2 this is a test; E3 c  Z" \6 ?0 D3 Y) w
3 Are you like awk8 p/ r5 h; B! Q* F, F
This's a test
' O: I  m9 y: I$ k( @10 There are orange,apple,mongo
) o# c9 O" T; E4 n1 j! P6 N8 A: S2 S
* x; P( `! {2 G8 s
用法一:6 a0 t* x/ c" s: ]

- d* u& C, a! ~2 H5 Yawk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
$ [8 O5 p) [+ i" L+ e3 j6 T6 e# V( a+ ~
2 O$ x& |3 p! w' h
实例:/ m' F% P5 A6 k$ T/ F. x- E* S0 d4 h- w

# s* C) Y4 `# x' P' }; E$ `& g6 r+ M# 每行按空格或TAB分割,输出文本中的1、4项( j2 ^1 E; q* y% ~: r
$ awk '{print $1,$4}' log.txt  I2 v, S0 {$ I4 n( d# U$ k
---------------------------------------------
& l  F& m9 s! O. u2 ^# [ 2 a
7 _6 r$ S+ ]2 ~ 3 like
2 S0 }! T0 h3 D This's: Y- \/ {6 n' a( F2 C$ s7 a3 `8 T
10 orange,apple,mongo& q) i$ q9 X% f( p" z( ?1 k; \3 q' D
# 格式化输出
, {9 N1 V6 d: o2 j) Y $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt( A; K, d) c+ v3 E# g6 C
---------------------------------------------
% B- C5 W" M. T3 d5 Z" M; N/ j 2        a
' H. s  m  r. S; X 3        like
5 v" {) v/ @9 S  Q8 J This's
1 m* o0 c: F7 M* h 10       orange,apple,mongo# \1 u6 g+ J2 f5 a0 Y$ d# Z
( k2 X: A- m( y; F: T

9 t, t& P% u, J7 G! ?用法二:- n3 W6 A' A, q4 Q6 i; P! X9 a) S

/ T* I6 c% r0 n( R  ]awk -F  #-F相当于内置变量FS, 指定分割字符7 d! q2 K2 t" H$ n/ X9 P

- a* m9 o5 U3 Y' Q$ S; Z
8 t, J; `$ d7 J+ V% o# T) T" b; z* q: ~实例:9 x/ f, c! S: f& ^9 \% ]
* }4 |+ M6 m" T" _5 z$ K7 W) n$ y8 W! j
# 使用","分割6 n  g- C: n# J2 ~1 s' v
$  awk -F, '{print $1,$2}'   log.txt  q: g" N6 }/ f' }
---------------------------------------------
" u5 R1 C9 `8 ~; T 2 this is a test
% K' e, }: u7 H% \& q; i/ A5 a0 b 3 Are you like awk
. O7 H% z2 y* b4 R3 u6 N This's a test
- h$ q0 V) G0 G- a" o) I 10 There are orange apple
3 q# Z, }' x* m# a7 W! Q  ~& R # 或者使用内建变量7 X$ Z6 k8 T; ^: n0 Q- Z8 @: [
$ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
2 ]4 V' i/ W; j ---------------------------------------------
9 t3 k7 U/ o5 K 2 this is a test. b' A1 T' c" Y( ~- J
3 Are you like awk
0 b# k; x8 D* F2 v& _$ F This's a test' `+ G, U# v' r, R6 r
10 There are orange apple
. A5 Q7 r* P) L- E  t) z3 N6 O # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
) b( `; w; I4 \& r- ?4 T $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
: B- @- L; w; {7 J  {6 [2 G$ _ ---------------------------------------------1 t! p9 W1 g3 H0 }% C8 o
2 this test
0 h0 B4 x% [, ?: ^ 3 Are awk
" H4 Q. v, ~2 o( w2 K; A This's a+ _1 G$ Q, N/ g; j! w% i5 X' b
10 There apple
2 Z4 L6 M$ {& X
) B% @0 k) }+ a. E+ x, y! h, m1 R; a  V2 F1 M! v6 F. h
+ {$ l8 E, p3 k9 w7 b
用法三:. r4 [* p, P! s9 o' p* u; h

7 C& u; X0 k" x0 F$ ^+ C) @awk -v  # 设置变量
6 @6 l, J1 _, j# ^4 a
1 p" ?, v( h" K) F8 J) t' r, w7 T2 S" }0 ^+ J
实例:; ?& z8 F/ l* U3 c! x
/ |7 F1 D7 A+ W3 W2 B1 @7 P
$ awk -va=1 '{print $1,$1+a}' log.txt
. z7 v6 |) U3 U' Z0 |, Q* u ---------------------------------------------$ C# M9 s7 m% s0 \) T2 A/ y
2 3
+ f+ N9 h9 S. Z8 W* d# n" X 3 4
/ }' y- ]5 j5 w. V- N, C This's 1( I, R% c, X4 w4 l
10 11
5 }& T  Q& P( p* b8 W5 v $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
5 W' a2 P# m& ~& ~9 T ---------------------------------------------" B0 a" [) f3 I' H0 D
2 3 2s
0 I$ n, a, U1 p% \# N9 |$ q 3 4 3s
* n0 d* B, [! Z' `- V This's 1 This'ss5 E% C5 J- C+ m+ i
10 11 10s$ ]2 p- P, o# w
* U' G/ r8 {6 z& Q6 f% m. f' D

9 X/ y: v9 P% o( ^. q) k2 M用法四:
, Z7 @' ?1 ^- ^9 r; T/ f+ ]2 R* ^/ W6 o0 X3 t
awk -f {awk脚本} {文件名}# v- b8 R; j& D1 U* G, r

& \& k1 N( \9 y' ^& c4 `- j% a0 @* r' N* z* q+ ?- x: M
实例:
) c# Y) k, g: A& H& M' P' @
  s8 m9 C9 J! U& @: @1 J $ awk -f cal.awk log.txt% N1 d9 }& W. E+ ~  }# }
运算符8 q8 S, f# n' g2 N" r7 k
运算符        描述
, m# B5 [3 Y; a7 l) A= += -= *= /= %= ^= **=        赋值
- l/ U: A. z* E4 j" t8 T7 H. `?:        C条件表达式
9 c6 w" u% t  c" S8 P' g||        逻辑或
$ k* X; L# S' I4 m# ~* p&&        逻辑与$ m( K3 U% |/ o) b4 Z5 R+ ~5 ?  Y+ U2 I' R
~ 和 !~        匹配正则表达式和不匹配正则表达式" s6 u. R5 b5 S9 N
< <= > >= != ==        关系运算符
0 ]8 |2 M0 T, {* [空格        连接- \: N6 l( G; Q+ i9 s# W9 C. N
+ -        加,减/ |3 G  K% E8 T, U) l
* / %        乘,除与求余% h$ d$ W1 y8 a* D/ P- A
+ - !        一元加,减和逻辑非4 _7 c8 d: X' R4 q
^ ***        求幂* C" {% C3 X/ F. r9 A1 B6 E# X
++ --        增加或减少,作为前缀或后缀3 Y/ D  m! k; b9 A: s
$        字段引用: Y5 H% [8 K& H- S& W4 R
in        数组成员" [) }1 b* V5 y9 Q' u5 a8 ~
过滤第一列大于2的行
( U4 M( R( h- G
( `% U1 P8 x7 {; t$ awk '$1>2' log.txt    #命令
% G+ S* }  a! j#输出" `9 x" i" r2 b, q
3 Are you like awk
8 ]' V/ j# l& PThis's a test* x7 ~0 r/ Y, `+ p
10 There are orange,apple,mongo& B+ s6 x% D: c/ i3 e5 f
过滤第一列等于2的行. P/ u& ^% w# C7 x9 S
/ _/ l5 i% o; c" y0 B0 @
$ awk '$1==2 {print $1,$3}' log.txt    #命令
# y: X  h" M9 h! R0 T" Z3 t#输出
9 z; k6 h( `3 g+ @2 is) ]# n( v* ]* b) Y
过滤第一列大于2并且第二列等于'Are'的行, v9 k0 v( V+ O+ l6 @/ [% ~

3 P* j6 S! D4 y" |( \+ p# D$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令
" E: W) k9 Y; x#输出
$ P+ c. _$ N8 P8 p' M3 Are you$ s$ h8 k/ a1 E9 s
内建变量5 b" K8 l9 C) X. `& P
变量        描述
/ h4 W5 d6 x8 k* e& A$n        当前记录的第n个字段,字段间由FS分隔
6 }  X9 A. K$ z9 z! ?; |$0        完整的输入记录/ e5 P  Q0 ^3 C  {
ARGC        命令行参数的数目  `3 }! v9 T/ D- ?, j
ARGIND        命令行中当前文件的位置(从0开始算)
# E7 z- {, ]# Q( T" l6 V8 VARGV        包含命令行参数的数组
0 d* I  B4 z$ g, F# \4 wCONVFMT        数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组4 u& c. T& e# _9 `5 {, u5 s, W) ^
ERRNO        最后一个系统错误的描述
, g- m- a6 A, j- ^1 zFIELDWIDTHS        字段宽度列表(用空格键分隔)3 d- R5 Q, k" a/ ?5 @% m' v- R
FILENAME        当前文件名
% I, g, a! g2 [& i1 e3 qFNR        各文件分别计数的行号
- y" S0 A. i" M0 j) U) T" \FS        字段分隔符(默认是任何空格)4 v  v2 G7 ~: Z. H7 q
IGNORECASE        如果为真,则进行忽略大小写的匹配
& N, l7 E! ]0 h# TNF        一条记录的字段的数目
; w2 o1 ]6 {8 r; c2 V  B  Z5 PNR        已经读出的记录数,就是行号,从1开始& R& n9 r: r  v" F: v: V4 i
OFMT        数字的输出格式(默认值是%.6g), i: h. N9 S6 M3 z9 l9 V2 i
OFS        输出字段分隔符,默认值与输入字段分隔符一致。
* Q6 s/ M$ E1 I8 V( q  aORS        输出记录分隔符(默认值是一个换行符)% V" a6 n9 C9 b. L
RLENGTH        由match函数所匹配的字符串的长度- F9 k. ^# p! e* u0 i
RS        记录分隔符(默认是一个换行符)
- y  |6 R* T* \+ X* [7 F5 a, yRSTART        由match函数所匹配的字符串的第一个位置
0 Q& J( C* k, Q2 X/ H% Q* d3 xSUBSEP        数组下标分隔符(默认值是/034)
0 m) A! U& j" G9 x; _$ 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.txt
$ }* Q; n+ F% s' M- s) [& SFILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
' j  H$ q% j7 G% Z$ S---------------------------------------------6 r1 [( P  I! u
log.txt    2    1         5    16 o$ W1 c/ c, Y+ K# G9 p4 M
log.txt    2    2         5    2
8 E& |" O5 C1 g9 H, O2 g- slog.txt    2    3         3    3
8 w  B' H( G; E" B& R; P  r# vlog.txt    2    4         4    4
# V, Z2 w& R9 i. x/ O$ 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$ Z  U9 S* N6 C
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
0 Y& ^/ m2 i: m! t+ ^- p! t---------------------------------------------
% r1 j( T, U$ L2 g- p8 t7 c* qlog.txt    2    1    '    1    1" A+ |+ U1 @0 w  k# q: G
log.txt    2    2    '    1    2, e% P/ k% A7 c; V) [1 p
log.txt    2    3    '    2    3
2 s2 n, R1 ?$ g: X! m8 I- I. Elog.txt    2    4    '    1    4
# x- X5 e& S9 D% s2 A# 输出顺序号 NR, 匹配文本行号
* c; r# {( [1 q& Z0 l* |$ awk '{print NR,FNR,$1,$2,$3}' log.txt
) T( X. n8 r" M1 K# h---------------------------------------------
9 S' c  D4 ^& j( U3 B. V1 1 2 this is
5 J1 X5 R3 g7 T: c0 ~# I9 c3 v+ e6 m2 2 3 Are you2 G! K; d$ Q% P" S! t! A' l' ~
3 3 This's a test
6 P" n) P/ l# X: ?- P& U( P4 4 10 There are- h; p; M  D# U& d# c" U7 e
# 指定输出分割符
2 M; F  u8 D# R1 @( M' @( _  q5 d$  awk '{print $1,$2,$5}' OFS=" $ "  log.txt
6 N: K; |. I3 q) J- v---------------------------------------------
  _" X: O3 U0 V7 Y6 z4 u2 $ this $ test
$ S% m0 q/ U# ^3 x; v9 q3 $ Are $ awk
9 X; O: e0 r5 V' M6 Z' ?This's $ a $
1 Y2 H4 s$ y7 z  K0 {- w% w8 J10 $ There $
( I$ b3 t$ V- K使用正则,字符串匹配
7 Q/ v+ I# ^- F# 输出第二列包含 "th",并打印第二列与第四列" d6 U' U8 z6 {; X3 Q
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
# e$ t1 j4 `5 t2 J- |---------------------------------------------0 G; V7 D- @; X2 t
this a
& K# ?. A( C' q+ H. o; C~ 表示模式开始。// 中是模式。
3 B! `+ Z* r0 @6 K4 f' _* k# Y
5 C" ]4 p- S3 I# 输出包含 "re" 的行. }6 x1 f2 I7 f4 x/ i" ^' B$ O
$ awk '/re/ ' log.txt
/ W" A& ?  H" j- }; [) {, v---------------------------------------------1 z" \9 k  h- Q% z; i) s
3 Are you like awk7 {$ \$ i. g: W! |
10 There are orange,apple,mongo
# Q, S4 z5 F* |1 A. q, T# n1 k忽略大小写
0 f1 M! C% n# J; j, ^& ?; w' ^7 W4 ~$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt7 c# ]3 L. P6 W0 _- O* b) X. ~
---------------------------------------------1 X! [. a$ o6 Q# f# F- K& J
2 this is a test
5 \2 z1 q: T) q/ y# [2 NThis's a test
$ T" B% K1 Z) R! J8 S模式取反* ?6 a0 `! T' ]+ x1 q
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
* Z; F- Z7 H7 [- Q  x---------------------------------------------
8 Z: f% A% i8 d- I( D1 c: QAre like
8 ~: o6 Z! I$ A5 Y0 Fa9 r- |& }5 J) V9 t3 J- @) [- c
There orange,apple,mongo% W0 B$ @0 T% o# v6 t3 ^
$ awk '!/th/ {print $2,$4}' log.txt/ Z+ q. O- y/ O6 D7 j
---------------------------------------------2 s5 R$ c9 R' I& k
Are like
3 c5 l  f. `6 ^5 ma; o0 G- G* X$ x* a0 o& ~
There orange,apple,mongo. s" y- F& f$ I' ~6 Z: w
awk脚本
" O/ N" A6 Y8 V- {关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。
/ [: _5 N$ P+ ?, s' g6 g- I
+ J+ {0 E$ ?0 FBEGIN{ 这里面放的是执行前的语句 }
. B0 L6 `" L) t. |; }. l: MEND {这里面放的是处理完所有的行后要执行的语句 }
$ J* u- _/ D$ |" J) M{这里面放的是处理每一行时要执行的语句}; n% D4 }7 U$ u; R- h4 _
假设有这么一个文件(学生成绩表):* J6 O4 s& V* V4 I, u, y
9 r2 i" B- u% p$ v4 l
$ cat score.txt
# F! ^( c6 j( y% g) sMarry   2143 78 84 77
2 ?7 R# d' t$ ]/ Y: RJack    2321 66 78 45
5 s( `- J* G4 U, aTom     2122 48 77 71  J  }' [0 b/ D( V5 u4 f: U; b8 K
Mike    2537 87 97 95
+ ]- B* a) X5 f: gBob     2415 40 57 62
& y  y- g' i# s$ o4 T- O; I我们的 awk 脚本如下:6 {# V+ h/ G4 h0 Z3 R; f/ C( O/ V
0 i% O/ l6 n1 m- r& F! V
$ cat cal.awk+ N, K4 j" d* i
#!/bin/awk -f
9 b% D, S% K" B& u#运行前
/ B0 |, p: ~" T. {BEGIN {9 l5 {" Q/ J1 t5 @3 o
    math = 0! K  g1 M- L# i* [& _1 x8 q3 |
    english = 0( D* O- g, X0 v& ^8 O
    computer = 0
" h- B+ I; f2 H  ^ 3 B+ \- A+ m& f! @, S8 z! H
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
( M- |: G, Z0 A. K; k' d, C    printf "---------------------------------------------\n"- X# j, E1 _! X$ [  W
}
( b1 u9 j( {( ~+ z; v#运行中
, ?! K) K- e1 |8 I{
6 D+ Y/ g6 M- G8 s    math+=$32 f# u/ V. O# P# Y; [
    english+=$4) o) ^( f$ }0 x7 h. s0 B6 Q
    computer+=$5# H: h/ \" E* O6 ]6 `' p0 O/ K( d
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
& Z$ i- N3 K* ]9 L; f}" Y5 _. \+ w6 Z$ i* f' c
#运行后
, \; l/ \1 f' {END {% R2 {9 A3 {1 q' n/ U0 z
    printf "---------------------------------------------\n"# K7 k' d; w9 W& L
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
5 A5 `& Z7 [  X- K: }% T    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
2 J. M9 A4 V: J) N# F}
1 ^+ E6 `+ L* K& M我们来看一下执行结果:
" J9 q: m1 K5 i; {
8 H* N% ]  W* f$ W: Q0 @$ awk -f cal.awk score.txt
+ ~: h0 {3 r* u7 d/ h1 v; q: KNAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL/ o) ^# v3 V, Y" ]1 V  K5 z
---------------------------------------------/ t, }. r, H0 a
Marry  2143     78       84       77      2397 x4 p. n. T. Y) c, a( T9 X
Jack   2321     66       78       45      189
- {5 Z( D: A$ u/ {7 H2 y* Q2 z. [Tom    2122     48       77       71      196( k5 W/ _+ K4 k1 N6 E
Mike   2537     87       97       95      279
/ `$ q9 Y& N  a. |. C: v& YBob    2415     40       57       62      159$ @* @) }8 e; y+ P/ }9 g
---------------------------------------------- {9 P7 e! I! H9 ~
  TOTAL:       319      393      3506 r# U* P, Y* W% E- A/ y; x
AVERAGE:     63.80    78.60    70.00/ K4 g4 t0 b& n! n, ]& N) ~& \! H, Y
另外一些实例
) M) e$ @1 L, k6 B, UAWK 的 hello world 程序为:
, x$ V  d! c( L6 t% `' ?2 Z# t& B# v* S" N1 k) X
BEGIN { print "Hello, world!" }
, h+ _  `" b* `& x4 t计算文件大小
7 `% i- i+ R" h! x# E. S+ ^# x5 b; I4 ?( c6 c
$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
+ T( W, d2 n% v( @: \, X--------------------------------------------------
' o* v! t! [+ w666581
9 c6 r! C4 H5 _# t& Y从文件中找出长度大于 80 的行:
( `: Q5 ^# i; P% W$ y) u& T8 o' r3 d2 c5 Y
awk 'length>80' log.txt
+ J" Z! j1 Z' m# X打印九九乘法表
6 H+ v0 D: }: H( t4 B8 y' s, ?4 e  y; N
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")}'% f8 ]9 `( Y! V2 O" q* P

该用户从未签到

2#
发表于 2021-9-2 13:45 | 只看该作者
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具

该用户从未签到

3#
发表于 2021-9-2 13:47 | 只看该作者
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符

该用户从未签到

4#
发表于 2021-9-2 13:48 | 只看该作者
AWK是一个强大的文本分析工具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 03:18 , Processed in 0.171875 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表