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 ,如需转载请自行联系原作者
相关文章
|
Shell Python Perl
awk 简单使用教程(二)
awk 简单使用教程(二)
124 1
|
Linux Python Perl
awk 简单使用教程(一)
awk 简单使用教程(一)
96 0
|
索引 Perl
文本处理利器——awk
文本处理利器——awk
124 0
|
Linux Perl Java
5分钟入门AWK
AWK是Linux上卓越的文本处理工具,它具有非常简单的语法结构,拥有强大的文本处理能力。AWK 是一种解释执行的编程语言,AWK 的名称是由它们设计者的名字缩写而来 —— Afred Aho, Peter Weinberger 与 Brian Kernighan。
1954 0
|
XML 数据格式 索引
awk高级玩法
1. 程序元素 一个awk 程序是一对以模式(pattern) 与大括号框起来的操作(action) 组合而成的,或许,还会加上实现操作细节的函数(function ) 。针对每个匹配于输人数据的模式,操作会被执行,且所有模式都会针对每条输人记录而检查。
1138 0
|
Web App开发 人工智能 Shell
|
人工智能 应用服务中间件 Perl