免费注册 查看新帖 |

Chinaunix

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

[文本处理] 我碰到一个比较难解决的问题,是文本处理的,不知道怎么说,请大神进来看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-05-18 17:25 |只看该作者 |倒序浏览
本帖最后由 巨蟹周子琪 于 2017-05-18 17:35 编辑

查询的结果是这样的
[root@controller ~]# neutron agent-list


书上的要求是

而我只能做到这样

求大神帮忙

论坛徽章:
0
2 [报告]
发表于 2017-05-18 17:27 |只看该作者
感觉好像不可能完成 毕竟这个太难了

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
3 [报告]
发表于 2017-05-18 17:48 |只看该作者
  1. cyg@win /tmp$ cat f
  2. +-----------+-----------+---------+------+
  3. | id        | aaa       | bbb     | ccc  |
  4. +-----------+-----------+---------+------+
  5. | 123123    | 8888      | 8777    | 9999 |
  6. | 123123    | 8888      | 8777    | 9999 |
  7. | 123123    | 8888      | 8777    | 9999 |
  8. +-----------+-----------+---------+------+
  9. cyg@win /tmp$ awk 'NR==2{for(i=1;i<=split($0,t,"|");i++){p=length(t[i])+1;s=s?s" "p:p}}FIELDWIDTHS=s{$1=$1;if(NR>FNR)printf "%s%s%s\n",$1,$2,$4}' f f
  10. +-----------+---------+
  11. | id        | bbb     |
  12. +-----------+---------+
  13. | 123123    | 8777    |
  14. | 123123    | 8777    |
  15. | 123123    | 8777    |
  16. +-----------+---------+
复制代码

论坛徽章:
0
4 [报告]
发表于 2017-05-18 17:52 |只看该作者
回复 3# haooooaaa

好厉害啊你,666 谢谢你,真的太牛逼了,这里的大神好多啊 我还以为这个应该不能实现的,太厉害啦你

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2017-05-18 22:14 |只看该作者
回复 1# 巨蟹周子琪

try:
  1. $ neutron agent-list | awk -F '[+|]' '{OFS=/\+/?"+":"|";print $1,$8,$3,$6,$1}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2017-05-18 23:19 |只看该作者
haooooaaa 发表于 2017-05-18 17:48


论坛徽章:
0
7 [报告]
发表于 2017-05-18 23:20 |只看该作者
get awk用这么6

论坛徽章:
0
8 [报告]
发表于 2017-05-19 18:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2017-05-21 14:24 |只看该作者
本帖最后由 jason680 于 2017-05-21 15:45 编辑

回复 1# 巨蟹周子琪




  1. $ cat f
  2. +-----------+-----------+---------+------+
  3. | id        | aaa       | bbb     | ccc  |
  4. +-----------+-----------+---------+------+
  5. | 123123    | 8888      | 8777    | 9999 |
  6. | 123124    | 8889      | 8778    | 9990 |
  7. | 123125    | 8880      | 8779    | 9991 |
  8. +-----------+-----------+---------+------+

  9. $ awk -vk="ccc,id" -f get_kw.awk f
  10. +------+-----------+
  11. | ccc  | id        |
  12. +------+-----------+
  13. | 9999 | 123123    |
  14. | 9990 | 123124    |
  15. | 9991 | 123125    |
  16. +------+-----------+

  17. $ awk -vk="bbb,ccc" -f get_kw.awk f
  18. +---------+------+
  19. | bbb     | ccc  |
  20. +---------+------+
  21. | 8777    | 9999 |
  22. | 8778    | 9990 |
  23. | 8779    | 9991 |
  24. +---------+------+

  25. $ awk -f get_kw.awk f
  26. Usage  : awk -vk="kw1,kw2,..." -f get_kw.awk FILE
  27. Example: awk -vk="binary,agent_type,alive" -f get_kw.awk file
  28. Example: neutron agent-list | awk -vk="binary,agent_type,alive" -f get_kw.awk
复制代码


$ cat get_kw.awk
  1. BEGIN{
  2.   if(k==""){
  3.     print "Usage  : awk -vk=\"kw1,kw2,...\" -f get_kw.awk FILE"
  4.     print "Example: awk -vk=\"binary,agent_type,alive\" -f get_kw.awk file"
  5.     print "Example: neutron agent-list | awk -vk=\"binary,agent_type,alive\" -f get_kw.awk"
  6.     exit
  7.   }
  8.   OFS=FS="|";
  9. }
  10. function trim(s){
  11.   gsub("^ +| +$","",s);
  12.   return(s);
  13. }
  14. function gh(s,k,n,t){
  15.   t=split(s,a,",");
  16.   for(n=2;n<=NF;++n){
  17.     ak[trim($n)]=n;
  18.   }
  19.   for(n=1;n<=t;++n){
  20.     k=a[n];
  21.     if(!ak[k]){
  22.       print "CAN NOT find the "k" key word in\n"$0;
  23.       exit;
  24.     }
  25.     h = h "+" ah[ak[k]]
  26.     an[++c] = ak[k];
  27.   }
  28.   h = h "+"
  29. }
  30. /^+-+/{
  31.   if(!h){
  32.     split($0,ah,"+");
  33.     next;
  34.   }
  35.   print h;
  36.   next
  37. }
  38. {
  39.   if(!h){
  40.     gh(k);
  41.     print h;
  42.   }
  43.   s = FS
  44.   for(n=1;n<=c;++n)
  45.     s= s $an[n] FS
  46.   print s
  47. }
复制代码

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP