Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2982343
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-12-16 23:26:49

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的值.




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

for_eric2014-02-18 12:33:32

#! /bin/awk -f
{
        if ($1 in a) {
                a[$1]=a[$1]"--"$0 }
        else {
                a[$1]=$0;
        }
}
END {
        for (i in a) {&nb

力哥丶2012-12-31 14:41:21

,++b[$1]]=$0 这个不懂。