例子一:打印文件N到N+M行
-F :允许awk更改其字段分隔符
-v :var=val把val值赋值给var如果有多个变量要赋值,那么就写多个-v,每个变量赋值对应一个-v
1
2
3
4
5
6
7
8
9
10
|
cat
txt
1.021 33
A 44
2.53 6
b 7
49 1
C 9
5.0 8
#打印文件N到N+M行
awk
-
v
N=2 -
v
M=3
'NR==N,NR==N+M{print}'
txt
|
例子二:内置变量
ARGC:命令行参数的个数
ARGV:命令行参数数组
ARGIND: 当前被处理文件的ARGV标志符
1
2
3
4
5
|
cat
a
I am
file
A
cat
b
I am
file
B
awk
'{if(ARGIND==1){print} if(ARGIND==2){print}}'
a b
|
NR:已经读出的记录数
FNR:当前文件的记录数
1
2
|
#输入文件a和b,由于先扫描a,所以扫描a的时候必然有NR==FNR,然后扫描b的时候,FNR从1开始计数,而NR则接着a的行数继续计数,所以NR > FNR
awk
'NR==FNR{print} NR>FNR{print}'
a b
|
FS:输入字段分隔符(缺省为:space:),相当于-F选项
awk -F ':' '{print}'a 和 awk 'BEGIN{FS=":"}{print}' a是一样的
OFS:输出字段分隔符(缺省为:space:)
1
2
3
4
5
6
7
|
cat
b
1:2:3
4:5:6
awk
-F
':'
'BEGIN{OFS=";"}{print $1,$2,$3}'
b
#那么把OFS设置成";"后就会输出
1;2;3
4;5;6
|
(小注释:awk把分割后的第1、2、3个字段用$1,$2,$3...表示,$0表示整个记录(一般就是一整行))
NF:当前记录中的字段个数
1
2
3
4
5
6
7
8
9
|
cat
c
1:2:3
1:2
awk
-F
':'
'{print NF}'
c
3
2
#可用于字段数过滤
awk
-F
':'
'{if(NF==3)print}'
c
1:2:3
|
RS:输入记录分隔符,缺省为"\n"
缺省情况下,awk把一行看作一个记录;如果设置了RS,那么awk按照RS来分割记录
1
2
3
4
5
6
|
cat
d
hello world;I am a boy;happy
awk
'BEGIN{RS=";"}{print}'
d
hello world
I am a boy
happy
|
ORS:输出记录分隔符,缺省为换行符,控制每个print语句后的输出符号
1
2
3
4
5
|
catc
1:2:3
1:2
awk
'BEGIN{ORS=";"}{print NF}'
c
1;1;
|
本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1298200
,如需转载请自行联系原作者