免费注册 查看新帖 |

Chinaunix

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

请问awk里可以实时抓取system调用外部命令的输出结果吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-14 19:33 |只看该作者 |倒序浏览
原意是想利用system下的$RANDOM
因为似乎rand()和srand()的结果都不理想啊,用rand()*srand()再加处理似乎也不行...

同时,也想到以后可能会需要其它情总实时抓取system调用的外部命令的执行结果。。。

论坛徽章:
0
2 [报告]
发表于 2010-05-14 19:49 |只看该作者
确切地说,我是需要在awk的同一行的处理里(实际上是在END里)产生多个良好的随机数,该怎么做最好呢?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2010-05-14 20:24 |只看该作者
怎么才算良好呢?

  1. awk 'END{print "'"$RANDOM"'","'"$RANDOM"'","'"$RANDOM"'"}' urfile
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-05-14 21:33 |只看该作者
ok,这里是我的命令:

  1. ifconfig|gawk --re-interval '{match($0,/inet ([0-9.]+) netmask/,ip);if (ip[1]&&ip[1]!="127.0.0.1") ips[++i]=ip[1];}END{for(i in ips) print ips[i],"'"$RANDOM"'";}'
复制代码
为什么$RANDOM取得的值总是单个呢。。。

论坛徽章:
0
5 [报告]
发表于 2010-05-14 22:11 |只看该作者
本帖最后由 zhangshebao 于 2010-05-14 22:13 编辑

4楼错误在于错误使用了单引号,传给gawk时已经转为常数了,怎么会变了?

  1. ipconfig|gawk --re-interval '
  2. {a[++i]=NF;print $0}
  3. END{for (i in a)system("echo \" "i","a[i]":\$RANDOM\" ");}
  4. '
  5. Windows IP Configuration

  6. Ethernet adapter 本地连接 3:
  7.         Media State . . . . . . . . . . . : Media disconnected
  8. Ethernet adapter 本地连接:
  9.         Media State . . . . . . . . . . . : Media disconnected
  10. Ethernet adapter 无线网络连接:
  11.         Connection-specific DNS Suffix  . :
  12.         IP Address. . . . . . . . . . . . : 192.168.2.10
  13.         Subnet Mask . . . . . . . . . . . : 255.255.255.0
  14.         Default Gateway . . . . . . . . . : 192.168.2.1
  15. Tunnel adapter Teredo Tunneling Pseudo-Interface:
  16.         Connection-specific DNS Suffix  . :
  17.         IP Address. . . . . . . . . . . . : 2001:0:4137:9e76:8000:84ed:8aa1:9e7a
  18.         IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
  19.         Default Gateway . . . . . . . . . : ::
  20. Tunnel adapter Automatic Tunneling Pseudo-Interface:
  21.         Connection-specific DNS Suffix  . :
  22.         IP Address. . . . . . . . . . . . : fe80::5efe:192.168.2.10%2
  23.         Default Gateway . . . . . . . . . :
  24. 26,1:25386
  25. 17,15:24111
  26. 4,1:9031
  27. 27,5:29620
  28. 18,13:17653
  29. 5,4:17673
  30. 28,1:12300
  31. 19,1:6791
  32. 6,1:13517
  33. 29,6:13653
  34. 7,16:3039
  35. 8,1:2728
  36. 9,3:11488
  37. 10,1:23782
  38. 20,5:12956
  39. 11,16:21036
  40. 30,15:11623
  41. 21,1:16938
  42. 12,1:28905
  43. 31,13:25407
  44. 22,6:25522
  45. 13,3:1377
  46. 23,15:18233
  47. 14,1:23995
  48. 1,1:9882
  49. 24,15:16899
  50. 15,6:18563
  51. 2,3:20533
  52. 25,13:13073
  53. 16,15:17324
  54. 3,1:9707
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-05-15 02:16 |只看该作者
但是ls朋友,你还是把$RANDOM放在system之内的呀,我需要的是把它拿在awk里用,实际上还会需要按我需要的范围进行处理的呢

论坛徽章:
0
7 [报告]
发表于 2010-05-15 02:18 |只看该作者
我本意是要随机取下标,达到随机使用ip地址的效果。。。

论坛徽章:
0
8 [报告]
发表于 2010-05-15 04:08 |只看该作者
既然用了awk,还用$RANDOM做什么呢。
先种上种子,就要瓜得瓜,要豆得豆了~

  1. awk 'BEGIN{srand()}{print rand(),rand(),rand()}' URFILE
复制代码

论坛徽章:
0
9 [报告]
发表于 2010-05-15 04:34 |只看该作者
  1. gawk '
  2. BEGIN{
  3.     for (i=0;i<10;i++)a[i]=i;
  4.     for(i=0;i<10;i++){
  5.        "for a in {1..10};do echo $RANDOM;done"|getline r;
  6.         print i,r,r1=int(r/32767*10),a[r1];
  7.     }
  8.     close("for a in {1..10};do echo $RANDOM;done") ;
  9. }
  10. '
  11. 0 4101 1 1
  12. 1 1275 0 0
  13. 2 25438 7 7
  14. 3 3775 1 1
  15. 4 3975 1 1
  16. 5 8576 2 2
  17. 6 4356 1 1
  18. 7 28694 8 8
  19. 8 24617 7 7
  20. 9 22849 6 6
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-05-21 00:56 |只看该作者
谢谢
花时间仔细看了getline的说明,大有收获
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP