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

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

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-14 11:34:46

文本:
stra b
stra c
stra d
strb 1
strb 2
strb 3

结果:
stra
b
c
d
strb
1
2
3

  1. awk '{print a[$1]++?$2:$1RS$2}' file

[解析]

  首先把语句剖析为2部分,第一部分是print,第二部分是打印输出的一个表达式。print输出的是什么内容呢?就是这个三目运算逻辑判断出的结果由print输出到屏幕。

  我们看看这个三目运算,分成三部分 (a[$1]++)--条件,?--成立则执行后面的内容,:--不成立则执行后面的内容。把每一行的$1作为下标放入数组a中,当然执行到第一行a[stra]是没有值的,即为空,条件为假,则输出stra"\n"b,然后自加一次该下标的数组a就有值了,为1。到了第二行,这个数组是有值的,条件为真,则只输出c,以此类推达到了效果。


 

 

  1. awk '{print $1==i?$2:$1 RS $2;i=$1}' file

[解析]

  利用一个变量来保存$1的值,然后来比较判断,效率上比数组高,特别是大文件的时候能体现优势。


  1. sed -nr ':a;N;s/^(\w*)( .*)\n\1(.*)/\1\2\3/;$bb;ta;:b;h;s/([^\n])\n.*/\1/;s/ /\n/g;p;x;s/[^\n]*\n(.*)/\1/;ta' file


阅读(5598) | 评论(5) | 转发(1) |
1

上一篇:crontab使用经验

下一篇:awk之NR & FNR

给主人留下些什么吧!~~

ll1045672016-07-23 19:09:57

awk \'{if(a!=$1){print $1}}{print $2}{a=$1}\'

ivyliner2012-06-26 10:17:48

awk '{print $1==i?$2:$1 RS $2;i=$1}' file
利用变量有一个前提条件是
stra b
stra c
stra d
strb 1
strb 2
strb 3
第一列必需是有序的.

ivyliner2012-06-26 09:30:56

awk '{stat[$1] = stat[$1]RS$2}END{for(el in stat)print el,stat[el]}' FILE

bikong04112011-11-24 09:14:43

很不错

rabbitlcat2011-05-20 17:11:44