免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fuyic
打印 上一主题 下一主题

一个awk 统计问题的求助 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-03-19 15:49 |只看该作者
回复 7# Shell_HAT


    a[$3]=$2;b[$3]++   就是这种形式不太明白,为什么要这样写呢?

论坛徽章:
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
12 [报告]
发表于 2010-03-19 16:08 |只看该作者
回复 11# fuyic


以140GB为例,a数组用来记录140GB的硬盘是SAS还是SATA,b数组用来记录140GB出现了多少次。

这个思路只能搞定你给出的特定数据,如果出现一个750GB的SAS硬盘,它就会得出错误的结果。

而且4楼贴代码时,print的第二个参数估计是笔误:
  1. awk -F, '{a[$3]=$2;b[$3]++}END{for(i in a)print a[i],i,b[i]}' urfile
复制代码

论坛徽章:
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
13 [报告]
发表于 2010-03-19 16:11 |只看该作者
回复 10# fuyic


NF的常见用法还有:
在总列数不定的情况下,获取倒数第N列。
在总列数不定的情况下,用for循环获取第m列到第n列。

论坛徽章:
0
14 [报告]
发表于 2010-03-19 16:38 |只看该作者
回复 12# Shell_HAT


         我好像没理解,现在已经出现了两种硬盘也正确得出了两种硬盘的数量,你说出现SAS 750G 就会不正确是啥意思?

论坛徽章:
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
15 [报告]
发表于 2010-03-19 16:40 |只看该作者
回复 14# fuyic


你把第一行的146改成750试试?

论坛徽章:
0
16 [报告]
发表于 2010-03-19 16:43 |只看该作者
回复 15# Shell_HAT


       改了试过了,统计结果还是正确的啊

论坛徽章:
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
17 [报告]
发表于 2010-03-19 16:57 |只看该作者
回复 16# fuyic


你的得到的“正确”结果是这样的吗?
# cat urfile
      physicaldrive 3I:1:1 (port 3I:box 1:bay 1, SAS, 750 GB, OK)
      physicaldrive 3I:1:2 (port 3I:box 1:bay 2, SAS, 146 GB, OK)
      physicaldrive 3I:1:3 (port 3I:box 1:bay 3, SAS, 146 GB, OK)
      physicaldrive 3I:1:4 (port 3I:box 1:bay 4, SAS, 146 GB, OK)
      physicaldrive 4I:1:5 (port 4I:box 1:bay 5, SAS, 146 GB, OK)
      physicaldrive 2E:1:1 (port 2E:box 1:bay 1, SATA, 750 GB, OK)
      physicaldrive 2E:1:2 (port 2E:box 1:bay 2, SATA, 750 GB, OK)
      physicaldrive 2E:1:3 (port 2E:box 1:bay 3, SATA, 750 GB, OK)
      physicaldrive 2E:1:4 (port 2E:box 1:bay 4, SATA, 750 GB, OK)
      physicaldrive 2E:1:5 (port 2E:box 1:bay 5, SATA, 750 GB, OK)
      physicaldrive 2E:1:6 (port 2E:box 1:bay 6, SATA, 750 GB, OK)
      physicaldrive 2E:1:7 (port 2E:box 1:bay 7, SATA, 750 GB, OK)
      physicaldrive 2E:1:8 (port 2E:box 1:bay 8, SATA, 750 GB, OK)
      physicaldrive 2E:1:9 (port 2E:box 1:bay 9, SATA, 750 GB, OK)
      physicaldrive 2E:1:10 (port 2E:box 1:bay 10, SATA, 750 GB, OK)
      physicaldrive 2E:1:11 (port 2E:box 1:bay 11, SATA, 750 GB, OK)
      physicaldrive 2E:1:12 (port 2E:box 1:bay 12, SATA, 750 GB, OK)
  1. awk -F, '{a[$3]=$2;b[$3]++}END{for(i in a)print a[i],i,b[i]}' urfile
复制代码
SAS  146 GB 4
SATA  750 GB 13

论坛徽章:
0
18 [报告]
发表于 2010-03-19 17:00 |只看该作者
回复 15# Shell_HAT


         啊。。。我知道了,好像按4楼这种写法确实是会出错误,不过按照 a[$2 $3] 这种方法写好像就不会有错。

论坛徽章:
0
19 [报告]
发表于 2010-03-19 19:12 |只看该作者
awk -F 'bay |, ' '{a[$3" "$4]++}END{for(i in a) print i,a[i]}' ufile

论坛徽章:
0
20 [报告]
发表于 2010-03-20 18:40 |只看该作者
回复 19# alfred1980


        为啥可以用 |  做分隔符?我原来文件里面好像没有|啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP