桑海

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

awk之特征相同行的合并 

文本:
1001  hisk01
1001  hisk02
1001  hisk03
1002  hisk04
1002  hisk05
1002  hisk06
1003  hisk07
1003  hisk08
 
特征相同的合并成一行:
1001 hisk01 hisk02 hisk03
1002 hisk04 hisk05 hisk06
1003 hisk07 hisk08
 
 
awk '{if($1==x){i=i" "$2}else{if(NR>1){print i};i=$0};x=$1;y=$2}' file <(echo)

 

 

[解析]
这也是老生常谈的内容了,不过这句代码有两个新颖的地方,按照这种判断格式比较更科学一些。<(echo)这是 yinyuemi老师 的一种新写法,可以省略掉最后的 END 输出,很实用。
  
awk '{a[$1]=a[$1]?a[$1]" "$2:$2}END{for(i=0;i++<asorti(a,b);)print b[i],a[b[i]]}' file
sed ':a;N;s/\(.* \)\( .*\)\n\1/\1\2/;ta;P;D' file

 

 
 我自己写的,繁琐~~
awk '{a[$1]++; b[$1, a[$1]]=$2}END{for(i in a) {printf("%s: ", i); for(j=1; j<=a[i]; j++) printf("%s ",b[i,j]); printf("\n")}}' data

 

posted on 2016-12-23 16:40  桑海  阅读(1426)  评论(0编辑  收藏  举报