免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7281 | 回复: 14
打印 上一主题 下一主题

求助!shell awk 空格的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-09 11:36 |只看该作者 |倒序浏览
以下是我的data文件,
Ch  AID           BID    CID      DID   EID FID GID
1   HT             b1:bb   WP     13     gg  AB  In
1   TP             2c:9a    A1      42     gg  AB  In
2   L_D           40:16   NO     23     gg  AB  In
4   TP             8c:21    PS     18     gg  AB  In
6   AN5j          00:25   PA      7      gg  AB  In
7   xi gua        ec:17    NONE 42     gg  AB  In

其中AID,CID,DID3列是我想要的东西,我原本的shell是这样的:cat data|awk '/^[0-9].*$/{ if(NF> continue; printf "%s\t%s\t%s\n",$(NF-6),$(NF-3),$(NF-4)}',这样打印出来的即为:
HT      13      WP
TP      42      A1
L_D    23      NO
TP      18      PS
AN5j    7       PA
可是这样子就把最后一行给滤掉了,因为我的分割域默认是空格,而NF>8的我就滤掉了,各位帮我修改下我的shell,使之能有如下打印结果:
HT         13      WP
TP         42      A1
L_D       23      NO
TP         18      PS
AN5j      7       PA
xi gua   42    NONE

十分感谢!!!

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-07-09 12:12 |只看该作者
如果位置都固定,用substr
  1. awk '/^[0-9]/{print substr($0,5,14),substr($0,33,6),substr($0,27,6)}' infile
复制代码
如果不固定。
  1. awk '/^[0-9]/{$1=$(NF-5)="";NF=NF-3;a=$NF;$NF=$(NF-1);$(NF-1)=a;print}' infile
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-07-09 12:47 |只看该作者
回复 1# guaguaguaguaxi


    NF>8的时候多打印一列不就行了。。。NF>8会有其他情况么?

论坛徽章:
0
4 [报告]
发表于 2012-07-09 15:12 |只看该作者
恩,可以实现,十分感谢你的帮助!! 回复 2# rdcwayx


   

论坛徽章:
0
5 [报告]
发表于 2012-07-09 15:15 |只看该作者
多打印一列是可以,但是我原本的意思是把AID这一列当成一个整体的,而AID往往可能由多个空格组成,按照我之前的做法会有些问题。。回复 3# personball


   

论坛徽章:
0
6 [报告]
发表于 2012-07-09 15:51 |只看该作者
回复 5# guaguaguaguaxi


    囧,可是数据的分隔符本就没好好的设置唉,都是空格貌似。。。
如果列与列之间是tab分隔的还干脆一点。。。
都是空格,又想让含空格的两个词视作一列。。。让计算机情以何勘。。。

论坛徽章:
0
7 [报告]
发表于 2012-07-09 23:37 |只看该作者
[root@localhost Desktop]# tail -6 data|awk '{print $2"\t"$5"\t"$4}'
HT      13      WP
TP      42      A1
L_D     23      NO
TP      18      PS
AN5j    7       PA
xi      NONE    ec:17

论坛徽章:
0
8
发表于 2012-07-10 09:51
看看了。。。。。
http://www.btrlyy.com

论坛徽章:
0
9 [报告]
发表于 2012-07-10 10:39 |只看该作者
回复 2# rdcwayx


    考虑如此全面,  佩服~~~

论坛徽章:
0
10 [报告]
发表于 2012-07-10 11:11 |只看该作者
我也知道这样很囧,但是我这里只是把问题简化描述而已,自己写了个data文件,事实上data文件是从一个命令打印出来的,里面的这AID一列是可以由空格组成的,而这是我无法改变的,所以我只能修改我的shell,因为按照我之前的是不能拿到正确的值的,呵呵。。回复 6# personball


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP