免费注册 查看新帖 |

Chinaunix

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

在一个awk命令中生成的一个数组,如何让另一个 awk命令使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-15 14:17 |只看该作者 |倒序浏览
本帖最后由 wawxdyy 于 2010-07-15 14:37 编辑

比如FILE1的内容如下:

  1. CA    22  1 0x0002c9030001c80b 4x SDR - SW     1 20 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  2. CA     4  1 0x0002c90109764131 4x SDR - SW     1 24 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  3. CA     5  2 0x0002c90109764132 4x SDR - SW     1 14 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  4. CA     3  2 0x0002c90109763f02 4x SDR - SW     1 12 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  5. CA     2  1 0x0002c90109763f01 4x SDR - SW     1 11 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  6. CA    19  1 0x0002c9030001c8e7 4x SDR - SW     1  7 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  7. CA    21  2 0x0002c90108ccfa62 4x SDR - SW     1 18 0x0008f10400411f9e ( 'wave183 HCA-1' - 'ISR9024S-M Voltaire' )
  8. CA    20  1 0x0002c90108ccfa61 4x SDR - SW     1  5 0x0008f10400411f9e ( 'wave183 HCA-1' - 'ISR9024S-M Voltaire' )
  9. CA    17  2 0x0003ba000100cda6 4x SDR - SW     1 19 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  10. CA    16  1 0x0003ba000100cda5 4x SDR - SW     1  4 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  11. CA    10  1 0x0002c90106a48d61 4x SDR - SW     1 13 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  12. CA    11  2 0x0002c90106a48d62 4x SDR - SW     1  3 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  13. CA     9  2 0x0003ba000100b0b6 4x SDR - SW     1 22 0x0008f10400411f9e ( 'wave179 HCA-1' - 'ISR9024S-M Voltaire' )
  14. CA     8  1 0x0003ba000100b0b5 4x SDR - SW     1  2 0x0008f10400411f9e ( 'wave179 HCA-1' - 'ISR9024S-M Voltaire' )
  15. CA    12  1 0x0002c90106a48cf1 4x SDR - SW     1 15 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  16. CA    13  2 0x0002c90106a48cf2 4x SDR - SW     1  1 0x0008f10400411f9e ( 'MT23108 InfiniHost Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  17. CA    15  2 0x0002c903000008d2 4x SDR - SW     1 10 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
  18. CA    14  1 0x0002c903000008d1 4x SDR - SW     1  8 0x0008f10400411f9e ( 'MT25408 ConnectX Mellanox Technologies' - 'ISR9024S-M Voltaire' )
复制代码
我想根据2,3,4列生成一个如下的数组:

  1. a[22-1]=0x0002c9030001c80b
  2. a[4-1]=0x0002c90109764131
  3. ...
复制代码
我是这样做的:

  1. awk '{a[$2-$3]=$4}' FILE1
复制代码
然后我向使用生成的数组处理第二个文件FILE2,FILE2内容如下:

  1. Switch 0x0008f10400411f9e ISR9024S-M Voltaire:
  2. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    1[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      13    2[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  3. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    2[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       8    1[  ] "wave179 HCA-1" (  )
  4. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    3[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      11    2[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  5. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    4[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      16    1[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  6. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    5[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      20    1[  ] "wave183 HCA-1" (  )
  7.            6[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  8. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    7[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      19    1[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  9. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    8[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      14    1[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  10.            9[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  11. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   10[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      15    2[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  12. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   11[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       2    1[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  13. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   12[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       3    2[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  14. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   13[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      10    1[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  15. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   14[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       5    2[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  16. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   15[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      12    1[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  17.           16[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  18.           17[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  19. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   18[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      21    2[  ] "wave183 HCA-1" (  )
  20. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   19[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      17    2[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  21. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   20[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>      22    1[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  22.           21[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  23. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   22[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       9    2[  ] "wave179 HCA-1" (  )
  24.           23[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>             [  ] "" (  )
  25. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   24[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>       4    1[  ] "MT23108 InfiniHost Mellanox T
复制代码
我想把每一个数组值a[m-n]添加每一个行中“==> ”与“m n”之间,好复杂阿,不知道怎么弄了,不知道说没说清楚

文件补全了

论坛徽章:
0
2 [报告]
发表于 2010-07-15 14:26 |只看该作者
awk 'ARGIND==1{a[$2-$3]=$4}ARGIND==2{....}' file1 file2

论坛徽章:
0
3 [报告]
发表于 2010-07-15 14:29 |只看该作者
man awk
查询
FNR NR

论坛徽章:
0
4 [报告]
发表于 2010-07-15 14:31 |只看该作者
本帖最后由 where27 于 2010-07-15 14:40 编辑

只要file1和file2中的数据有关联就可以。。

论坛徽章:
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 [报告]
发表于 2010-07-15 14:34 |只看该作者
每一行都有“==> ”与“m n”吗?

论坛徽章:
0
6 [报告]
发表于 2010-07-15 14:34 |只看该作者
awk 'ARGIND==1{a[$2-$3]=$4}ARGIND==2{....}' file1 file2
kwokcn 发表于 2010-07-15 14:26


谢谢啊,还是gawk强大啊,请问后面怎么把每一个值加进去?不知道在awk如何像sed那样使用\1\2

论坛徽章:
0
7 [报告]
发表于 2010-07-15 14:35 |只看该作者
每一行都有“==> ”与“m n”吗?
blackold 发表于 2010-07-15 14:34



    是的,不好意思,我没有把文件贴全

论坛徽章:
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
8 [报告]
发表于 2010-07-15 14:36 |只看该作者
回复 7# wawxdyy


    如果m n的位置固定就很容易啊。

论坛徽章:
0
9 [报告]
发表于 2010-07-15 14:39 |只看该作者
回复  wawxdyy


    如果m n的位置固定就很容易啊。
blackold 发表于 2010-07-15 14:36


我看错了,不是每一行都有m n,没有的不需要处理,这样数组数和需要处理的行数就一样了

论坛徽章:
0
10 [报告]
发表于 2010-07-15 14:43 |只看该作者
FILE2中有m n的行都有Active和LinkUp,反之都是Down/Polling
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP