免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5392 | 回复: 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
23 [报告]
发表于 2010-07-25 21:37 |只看该作者
awk '{printf "a[%d-%d]=%s\n",$2,$3,$4}' FILE1

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
22 [报告]
发表于 2010-07-25 15:07 |只看该作者
FNR NR

论坛徽章:
0
21 [报告]
发表于 2010-07-25 13:52 |只看该作者
我也写个HOHO~
awk 'NR==FNR{a[$2"    "$3]=$4}NR>FNR{FS="[==>[]";sub(/==>/,"==>"a[gensub(/[^0-9]*/,"",1,$7)]);}1' linux.181 linux.182

论坛徽章:
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
20 [报告]
发表于 2010-07-16 09:23 |只看该作者
回复 19# wawxdyy


    有个错误:gawk 'NR==FNR{a[$2","$3]=$4;next}/==>/{FS="==> *";$0=gensub(/(==> *)([0-9]+) *([0-9]+)/,"\\1\\2\\1\\3\\1\\2 \\3","g");$2="==>  "a[$2","$3]" ";$3="";OFS=""}1'

   有的行只有==>,但后面没有数字。第二条pattern{action}的pattern要修改:
/==> *[0-9]+ +[0-9]+/

gawk 'NR==FNR{a[$2","$3]=$4;next}/==> *[0-9]+ +[0-9]+/{FS="==> *";$0=gensub(/(==> *)([0-9]+) +([0-9]+)/,"\\1\\2\\1\\3\\1\\2 \\3","g");$2="==>  "a[$2","$3]" ";$3="";OFS=""}1'

论坛徽章:
0
19 [报告]
发表于 2010-07-15 16:34 |只看该作者
回复 17# blackold


    结果对了,我在我的及其稍稍改了一下

  1. gawk 'NR==FNR{a[$2","$3]=$4;next}/==>/{FS="==> *";$0=gensub(/(==> *)([0-9]+) *([0-9]+)/,"\\1\\2\\1\\3\\1\\2 \\3","g");$2="==>  "a[$2","$3]" ";$3="";OFS=""}1'
复制代码
再次感谢黑哥

论坛徽章:
0
18 [报告]
发表于 2010-07-15 16:23 |只看该作者
回复  blackold


   请解释一下gensub(/(==> *)([0-9]+) *([0-9]+)/,"\\1\\2\\1\\3\\1","g"是什么意思 ...
wawxdyy 发表于 2010-07-15 16:10



    清楚了,是用"==> *"当分隔符

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


    结果对了吗?

论坛徽章:
0
16 [报告]
发表于 2010-07-15 16:10 |只看该作者
本帖最后由 wawxdyy 于 2010-07-15 16:12 编辑

回复 14# blackold


   请解释一下gensub(/(==> *)([0-9]+) *([0-9]+)/,"\\1\\2\\1\\3\\1","g")是什么意思行吗?

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



    哦也,啥也不说了,就一个字,谢!

我试了一下,发现m n被去掉了。

  1. # gawk 'NR==FNR{a[$2","$3]=$4;next}/==>/{FS="==> *";$0=gensub(/(==> *)([0-9]+) *([0-9]+)/,"\\1\\2\\1\\3\\1","g");$2="==>  "a[$2","$3];$3="";OFS=""}1' /tmp/file3 /tmp/file1
  2. Switch 0x0008f10400411f9e ISR9024S-M Voltaire:
  3. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    1[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90106a48cf2[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  4. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    2[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0003ba000100b0b5[  ] "wave179 HCA-1" (  )
  5. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    3[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90106a48d62[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  6. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    4[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0003ba000100cda5[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  7. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    5[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90108ccfa61[  ] "wave183 HCA-1" (  )
  8.            6[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  9. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    7[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c9030001c8e7[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  10. 0x0008f10400411f9e "ISR9024S-M Voltair"       1    8[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c903000008d1[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  11.            9[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  12. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   10[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c903000008d2[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  13. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   11[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90109763f01[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  14. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   12[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90109763f02[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  15. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   13[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90106a48d61[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  16. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   14[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90109764132[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  17. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   15[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90106a48cf1[  ] "MT23108 InfiniHost Mellanox Technologies" (  )
  18.           16[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  19.           17[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  20. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   18[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90108ccfa62[  ] "wave183 HCA-1" (  )
  21. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   19[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0003ba000100cda6[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  22. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   20[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c9030001c80b[  ] "MT25408 ConnectX Mellanox Technologies" (  )
  23.           21[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  24. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   22[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0003ba000100b0b6[  ] "wave179 HCA-1" (  )
  25.           23[  ]  ==( 4X 2.5 Gbps   Down /  Polling)==>  
  26. 0x0008f10400411f9e "ISR9024S-M Voltair"       1   24[  ]  ==( 4X 2.5 Gbps Active /   LinkUp)==>  0x0002c90109764131[  ] "MT23108 InfiniHost Mellanox Technologies" (  )

复制代码
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP