免费注册 查看新帖 |

Chinaunix

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

看看怎样只用shell下的东西做出百度的笔试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-06 13:12 |只看该作者 |倒序浏览
一个文本文件有多行,每行为一个URL。请编写代码,统计出URL中的文件名及出现次数。

  a) 文件名不包括域名、路径和URL参数,例如http://www.ourday.cn/bbs/forumdisplay.php?fid=18中的文件名是forumdisplay。

  b) 部分URL可能没有文件名,例如http://www.ourday.cn/,这类统计为“空文件名”。

  c) 出现在不同URL中的相同文件名视为同一文件名,例如http://www.ourday.cn/index.phpftp://ftp.ourday.cn/index.php为同一文件名

  文件内容示例如下:

  http://www.ourday.cn/bbs/redirec ... o=lastpost#lastpost

  http://www.ourday.cn/index.php

  ftp://ftp.ourday.cn/index.php

  http://www.ourday.cn/bbs/index.php?k=8

  http://www.ourday.cn/bbs/forumdisplay.php?fid=16

  http://www.ourday.cn/bbs/viewthr ... &extra=page%3D1

  http://www.ourday.cn/

      http://www.ourday.com.cn/

以上url地址经修改,不影响试题内容。

大家试试看,我是做不出来

论坛徽章:
0
2 [报告]
发表于 2008-09-06 14:00 |只看该作者

抛砖引玉

sed -e 's/.*\/\([^.]*\).*/\1/g' in

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
3 [报告]
发表于 2008-09-06 14:13 |只看该作者
gawk '{print a[split($0,a,"/")];}' a |awk -F. '{a[$1]++}END{for(i in a)print i " "a}'

论坛徽章:
0
4 [报告]
发表于 2008-09-06 15:23 |只看该作者
awk '{sub(/.*\//,"");sub(/( |\.).*/,"");a[$0]++;}END{for(n in a)if(n)print n,a[n];}'

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-09-06 16:29 |只看该作者
http://www.ourday.cn/bbs/forumdisplay.php?fid=18中的文件名应该是forumdisplay.php吧?

  1. awk '{sub(/?.*/,"");sub(/.*\//,"");sub(/\.[^.]*$/,"");a[$0]++}END{for(i in a)print i,a[i]}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2008-09-07 00:32 |只看该作者
为啥
cat url | awk '{sub(/?*/,"");print $0}'
不能将问号和后面的东西去掉呢?

cat url | awk '{sub(/?.+/,"");print $0}'
就行?

论坛徽章:
0
7 [报告]
发表于 2008-09-07 10:10 |只看该作者
ls,首先?这种元字符要加上转义\?!你的问题就是一个简单的正则表达式问题.?匹配零个或一个前导字符,*匹配零个或者多个前导字符,.匹配单个任意字符!这样就简单了
去掉问号后面所有字符的就用: sub(/\?.*/,"")   同理去掉.后面的:sub(/\..*/,"").去前面的路径就不说了.
如果文件名包含后缀的话就是去问号了: awk '{sub(/.*\//,"");sub(/\?.*/,"");a[$0]++;}END{for(n in a)if(n)print n,a[n];}'

如果文件名不包含后缀的话就是去后缀的那个点开始: awk '{sub(/.*\//,"");sub(/\..*/,"");a[$0]++;}END{for(n in a)if(n)print n,a[n];}'

个人同意cjaizss的观点,文件名是包含后缀的~~~

论坛徽章:
0
8 [报告]
发表于 2008-09-07 10:54 |只看该作者

  1. awk -F '[/?]' 'NF>3{if($0~/\?/) NF--;if($NF=="") $NF="空文件名" ;a[$NF]++}END{for(i in a)print i"\t"a[i]}'  数据文件
复制代码

论坛徽章:
0
9 [报告]
发表于 2008-09-07 11:08 |只看该作者
sed -e 's/?.*//g' -e 's/.*\///g' test.txt |uniq -c


   1 redirect.php
   3 index.php
   1 forumdisplay.php
   1 viewthread.php
   2

论坛徽章:
0
10 [报告]
发表于 2008-09-09 11:11 |只看该作者
cat url | awk -F/ '{ print $NF }' | awk -F? '{print $1 }' | sort | uniq -c
      2
      1 forumdisplay.php
      3 index.php
      1 redirect.php
      1 viewthread.php
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP