免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3262 | 回复: 14

[文本处理] 求助下各位,AWK 三条判断嵌套怎么写? [复制链接]

论坛徽章:
2
狮子座
日期:2014-08-15 00:24:232015元宵节徽章
日期:2015-03-06 15:52:30
发表于 2014-09-15 01:16 |显示全部楼层
本帖最后由 djzhangxing 于 2014-09-15 01:18 编辑

问题是这样的
  1. 2.3TB    /video/CLOUD
  2. 15.6GB   /video/YINGSHIKU
  3. 541.5MB  /video/SOCIAL
  4. 79.8MB   /video/2013
  5. 7.3TB    /video
复制代码
将第一列的换算成KB,我想了一个笨办法,还有没有单位

  1. awk 'sub("TB",""){$1=$1*10000000000;print $0}' 将TB换成kB
  2. awk 'sub("GB",""){$1=$1*1000000;print $0}' 将GB换成kB
  3. awk 'sub("MB",""){$1=$1*1000;print $0}' 将MB换成kB
复制代码
这三条怎么综合起来呢,成为一条长的命令,awk if ,else if 可以吗?或者有其他好方法吗?

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
发表于 2014-09-15 08:07 |显示全部楼层
if else可以啊,另外,1MB=1024KB,不是1000KB

论坛徽章:
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
发表于 2014-09-15 08:47 |显示全部楼层
回复 1# djzhangxing
  1. awk '$1~/MB/{$1*=10^3}$1~/GB/{$1*=10^6}$1~/TB/{$1*=10^9}1' urfile
复制代码

论坛徽章:
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
发表于 2014-09-15 08:58 |显示全部楼层
回复 1# djzhangxing

Would you like this by using match function in awk ...

you can change it by yourself
KB= 1000B or 1024B

$ awk -vu="MGT" 'BEGIN{t=split(u,a,"");for(n=1;n<=t;n++){k[a[n]]=1000**n;print n,a[n],k[a[n]]}}{if(match($1,"(["u"])B",m)){$1=$1*k[m[1]] "KB";print $0}}' FILE
1 M 1000
2 G 1000000
3 T 1000000000
    <== for check only
2300000000KB /video/CLOUD
15600000KB /video/YINGSHIKU
541500KB /video/SOCIAL
79800KB /video/2013
7300000000KB /video

   

论坛徽章:
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
发表于 2014-09-15 09:06 |显示全部楼层
回复 2# Kasiotao


    也有1000的说法

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
发表于 2014-09-15 09:24 |显示全部楼层
学生党:飘过
awk '$1~/MB/{$1*=10^3}$1~/GB/{$1*=10^6}$1~/TB/{$1*=10^9}1' file

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
发表于 2014-09-15 09:25 |显示全部楼层
回复 5# blackold
1MB=1000KB, 1MiB=1024KiB
但是我觉得计算机统计文件大小应该是用的iB吧,所以我给楼主说建议是1=1024
比如我电脑买的时候写的是500GB,但是世界上df -h统计出来的肯定是<500的吧
感觉1=1000,用在信号处理的频率计算时比较好。。。。个人理解,不知道黑哥咋看

   

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-09-15 09:43 |显示全部楼层
回复 1# djzhangxing


awk的if判断如下写法
  1. cat abc
  2. a1
  3. b2
  4. c3
  5. d4

  6. cat abc|awk '{if ($1~/1/){print "a"} else if ($1~/2/) {print "b"} else {print "c"}}'
  7. a
  8. b
  9. c
  10. c
复制代码
不过这种办法比较土,不如用'next'来代替
  1. cat abc|awk '/1/{print "a";next}/2/{print "b";next}{print "c"}'
  2. a
  3. b
  4. c
  5. c
复制代码

论坛徽章:
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
发表于 2014-09-15 09:46 |显示全部楼层
回复 7# Kasiotao


    嗯,有道理。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2014-09-15 10:59 |显示全部楼层
回复 1# djzhangxing


你的原始数据是怎么来的?
df -h ?
如果是,只要换成
df -k
就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP