AWK神器,继续案例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值