码迷,mamicode.com
首页 > 其他好文 > 详细

awk的一些使用记录(更新ing)

时间:2015-07-06 20:13:49      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:awk 记录

请使用awk命令将如下两份文件中名字相同的两行合并起来
   A文件:
      
孙行者 50岁
行者孙 500岁
者行孙 5000岁
孙者行 50000岁
   B文件:
   
行者孙 男
者行孙 男
孙行者 男
孙者行 男
输出效果:
    孙行者 50岁 男
[root@localhost ~]$ cat a b |sort -k1 |awk ‘BEGIN{t=""}{t=$1;if(tt==t){printf("%s",$2);printf("\n")}else{printf("%s %s ",$1,$2);}tt=t}‘ 
孙者行 50000岁 男
孙行者 50岁 男
者行孙 5000岁 男
行者孙 500岁 男

思路:先合并两个文件并排序

[root@localhost ~]$ cat a b |sort -k1
孙者行 50000岁
孙者行 男
孙行者 50岁
孙行者 男
者行孙 5000岁
者行孙 男
行者孙 500岁
行者孙 男
先定义一个容器为$1,也就是名字,然后做判断如果下一行的$1与这个相同的话,只输出$2,并换行。因为定义为空,所以不符合所以判断else输出$1,$2 也就是 孙者行 50000。其后判断相同只输出 $2 并换行。
如果说要的输出效果是 孙行者 50岁
               男

那要怎么办呢?

 cat a b |sort -k1 |awk ‘BEGIN{t=""}{t=$1;if(tt==t){printf("\t");printf("%s",$2);printf("\n")}else{printf("%s %s",$1,$2);printf("\n")}tt=t}‘  
孙者行 50000岁
        男
孙行者 50岁
        男
者行孙 5000岁
        男
行者孙 500岁
        男
思路其实都是一样的。


本文出自 “孜孜不倦的学习着...” 博客,请务必保留此出处http://jonyisme.blog.51cto.com/3690784/1671260

awk的一些使用记录(更新ing)

标签:awk 记录

原文地址:http://jonyisme.blog.51cto.com/3690784/1671260

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!