例子一:打印文件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,如需转载请自行联系原作者