免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed和awk的问题求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-26 10:37 |只看该作者 |倒序浏览
第一个问题:为什么第一行搜索fish的结果为两行,而同时搜索dog时结果就变成了一行?
$ sed -n '/fish/p' pets.txt
This is my fish
  my fish's name is george

$ sed -n '/dog/,/fish/p' pets.txt
This is my dog
  my dog's name is frank
This is my fish

第二个问题再请教下
ps aux | awk ‘NR!=1{a[$1]+=$6;} END { for(i in a) print i “, ” a[i]“KB”;}’
中a是什么意思?a[$1]+=$6;有代表什么?
谢谢

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2013-02-26 10:40 |只看该作者

找到一个匹配就结束

a是定义的数组

论坛徽章:
0
3 [报告]
发表于 2013-02-26 10:46 |只看该作者
回复 2# liion631818


    为什么找到第一个就结束?多重查找中只能这样,如何能做到匹配所有的行?谢谢

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2013-02-26 10:52 |只看该作者
1.打印第一次匹配到dog到第一次匹配到fish之间的内容。

2.a是数组,a[$1]+=$6表示以$1为数组下标建立数组a,并累加$6的值。

论坛徽章:
0
5 [报告]
发表于 2013-02-26 10:52 |只看该作者
sed -n '/fish/p' pets.txt
全文查找fish字符串,有几个显示几个。

sed -n '/dog/,/fish/p' pets.txt
全文查找从第一个dog到第一个fish范围内的行

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
6 [报告]
发表于 2013-02-26 11:00 |只看该作者
回复 3# xxdxxdxxd


    /dog/,/fish/ 这样是查找第一次出现dog和fish之间一段内容,不是查找包含(dog|fish)的行

论坛徽章:
0
7 [报告]
发表于 2013-02-26 11:01 |只看该作者
回复 4# yestreenstars


谢谢,明白了,再多请教两个问题:
1. 如果我想同时匹配所有的fish和dog那么该如何写呢?
2. 假如我想打印三行信息例如,怎样才能正确打印呢?
$ ps aux| awk 'NR!=1{a[$1]+=$2+=3} END {for (i in a) print i ", " a"KB"", " a"KB";}'
nobody, 55KB, 55KB
root, 7729KB, 7729KB
_locationd, 71KB, 71KB
_mdnsresponder, 37KB, 37KB
_spotlight, 2953KB, 2953KB
_coreaudiod, 623KB, 623KB

谢谢

论坛徽章:
0
8 [报告]
发表于 2013-02-26 11:08 |只看该作者
回复 1# xxdxxdxxd


USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10368   524 ?        Ss    2012   0:11 init [3]                                             
root         2  0.0  0.0      0     0 ?        S<    2012   0:06 [migration/0]
root         3  0.0  0.0      0     0 ?        SN    2012   4:53 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/0]
root         5  0.0  0.0      0     0 ?        S<    2012   0:07 [migration/1]
root         6  0.0  0.0      0     0 ?        SN    2012   2:38 [ksoftirqd/1]
root         7  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/1]
root         8  0.0  0.0      0     0 ?        S<    2012   0:06 [migration/2]
root         9  0.0  0.0      0     0 ?        SN    2012   0:09 [ksoftirqd/2]
root        10  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/2]
root        11  0.0  0.0      0     0 ?        S<    2012   0:06 [migration/3]
root        12  0.0  0.0      0     0 ?        SN    2012   0:06 [ksoftirqd/3]
root        13  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/3]
root        14  0.0  0.0      0     0 ?        S<    2012   0:04 [migration/4]
root        15  0.0  0.0      0     0 ?        SN    2012   0:06 [ksoftirqd/4]
root        16  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/4]
root        17  0.0  0.0      0     0 ?        S<    2012   0:05 [migration/5]
root        18  0.0  0.0      0     0 ?        SN    2012   0:07 [ksoftirqd/5]
root        19  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/5]
root        20  0.0  0.0      0     0 ?        S<    2012   0:04 [migration/6]
root        21  0.0  0.0      0     0 ?        SN    2012   0:09 [ksoftirqd/6]
root        22  0.0  0.0      0     0 ?        S<    2012   0:00 [watchdog/6]
root        23  0.0  0.0      0     0 ?        S<    2012   0:05 [migration/7]


a是一个数组,以$1为下标的数据,根据ps aux的实际输出就是以用户名为下标的数组,a[root] a[nginx] a[squid] a[daemon]等 root、nginx、squid等就是下标

a[$1]+=$6实际为a[$1]=a[$1]+$6这是在累计RSS值的大小,举个例将下标为root的所有RSS值相加,求的用户root的RSS大小。

END{}这部分就是将数组内容循环输出

不知说的对不对,高手指点一下。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
9 [报告]
发表于 2013-02-26 11:15 |只看该作者
回复 7# xxdxxdxxd


    第一个问题可以用sed -nr '/fish|dog/p',第二个没看懂~

论坛徽章:
0
10 [报告]
发表于 2013-02-26 11:20 |只看该作者
awk '$0 ~ /fish|dog/{print}' urfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP