Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541835
  • 博文数量: 375
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 10:21
文章分类

全部博文(375)

文章存档

2015年(1)

2014年(374)

分类: LINUX

2014-08-18 14:01:03

cat file:
AX  BX   1
AX  BX   2
AX  BX   1
AX  BX   8
AX  BX   1
AX  BX   3
AX  BX   5
CX  BX   1
CX  BX   0
CX  BX   1
CX  BX   6
CX  BX   9
EX  BX   1
EX  BX   a
EX  BX   1
EX  BX   1
EX  BX   1
EX  BX   6
EX  BX   1
EX  BX   1
EX  BX   1
EX  BX   1
EX  BX   x
EX  BX   y

要求打印第一列相同的头两行和末尾两行:
AX  BX   1
AX  BX   2
AX  BX   3
AX  BX   5

CX  BX   1
CX  BX   0
CX  BX   6
CX  BX   9

EX  BX   1
EX  BX   a
EX  BX   x
EX  BX   y






  1. awk '{a[$1,++b[$1]]=$0}END{for(i in b)print a[i,1]"\n"a[i,2]"\n"a[i,b[i]-1]"\n"a[i,b[i]]"\n"}' file
[解析]
利用我们的老朋友数组来操作, 数组a来保存每一行的内容, 因为要打印头两行和末尾两行, 那么必须要知道首字段相同的内容的行数, 这里用b数组来统计行数, 有两个精妙之处, 第一: 获得了首字段的内容, 在数组b里是下标, 第二: 统计了第一列相同的内容的行数. END最后用for循环取出下标, 然后输出数组a的值.




阅读(936) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~