LINUX中查看文本文件内容命令
cat:从第一行開始显示所有的文本内容;
tac:从最后一行開始,显示所有分文本内容,与cat相反。
nl:显示文本时,能够输出行号。
more:按页显示文本内容;
less:与more差点儿相同,也是按页显示文本内容,差别是less能够一行一行的回退。more回退仅仅能一页一页回退。
head:从头開始显示文件指定的行数;
tail:显示文件指定的结尾的行数。但每一行的位置还是原文件里的位置,不会像tac那样与原文件相反。
vi: NB的Linux文本编辑器。
样例与说明
cat
- cat demo.txt
显示demo.txt文件所有内容 - cat -b demo.txt
显示demo.txt文件所有内容。非空的行输出行号。空行会输出。但不标记行号 - cat -n demo.txt
显示demo.txt文件所有内容。所有行都输出行号
长处:简单
缺点:当文本文件内容多于一页内容时。仅仅能显示出最后一页的内容,无法看到前面的内容。
tac
- tac demo.txt
从最后一行開始。倒序输出demo.txt的内容。本人不经常使用。
nl
- nl demo.txt
显示文件内容。顺便输出行号。默认情况下空行不记录行号 - nl -b a demo.txt
- b a #空行也输出行号
- b t #默认设置
- n ln ##行号最左方显示
- n rn ##行号最右方显示,且不加0(然并卵,我的机器上依旧显示在左边)
- n rz ##行号最右方显示,且加0(再次然并卵,但加了0了。例如以下图所看到的)
- w ##设置行号字段占用的位数
长处:貌似非常灵活的样子
缺点:就查看下内容。输出个行号而已。搞那么复杂有卵用。。。
more
- more demo.txt
- 按一下空格则往下翻一页
- 按一下Enter则往下翻一行
- 按一下B键往上翻一页
- 不能往上一行一行的翻回去了
- :f 能够显示文件名称和如今的行数
- q退出more
less
- less demo.txt
- more命令的所有按键less都支持
- ↑↓箭头能够实现一行一行的上下翻
- PageDown/PageUp能够实现一页一页的上下翻
head
- head demo.txt
默认仅仅显示文件的前10行文本内容 - head -n 6 demo.txt
-n 6 參数指定显示文件的前6行 - head -n -4 demo.txt
-n -4 负数表示除去文件结尾的4行,其它的从头開始的所有行都显示出来
tail
- tail demo.txt
默认仅仅显示从文件最后一行開始的10行文本内容 - tail -n 5 demo.txt
-n 5 參数指定显示文件的最后5行 - tail -n -5 demo.txt
**-n -5**tail命令不支持负数。运行结果同-n 5
vi
vi命令是使用VIM文本编辑器打开文本,VIM编辑器眼下本人也是刚開始学习。仅仅记住了一些简单的命令:
- vi demo.txt 进入Normal模式查看文本
- i 进入Insert模式插入内容,编辑文本
- nG n代表行号,在Normal模式输入nG则定位到第n行
- :set number 在Normal模式输入则显示文本行号。空行也会显示行号
- ESC 退出Insert模式至Normal模式
- :wq 在Normal模式下保存退出。w保存;q退出;能够单独使用
通过对web日志的挖掘来实现内容推荐系统
先说一说问题,不知道大家有没有这样的经验,反正我是经常碰到。
举例1,某些网站每隔几天就发邮件给我,每次发的邮件内容都是一些我根本不感兴趣的东西,我不甚其扰,对其深恶痛绝。
举例2,添加具有某功能的一个msn机器人,每天都有几次突然蹦出一个窗口,推荐一堆我根本不想知道的内容,烦不烦啊, 我只好将你阻止掉。
每一个观众只想看他感兴趣的东西,而不是一下与之无关的事物,那么如何才能知道观众的兴趣所在呢,还是数据挖掘,经过一番思考,终于有点思路,即根据用户 以往的浏览历史来预测用户将来的行为,也就是基于内容的推荐。
基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象 的特征,学习用户的兴趣,考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法,常用的有决策树、神经网络和基于向量的表示方法等。 基于内容的用户资料是需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。
基于内容推荐 方法的优点是:
1)不需要其它用户的数据,没有冷开始问题和稀疏问题。
2)能为具有特殊兴趣爱好的用户进行推荐。
3)能推荐新的或不是很流行的项目,没有新项目问题。
4)通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。
5)已有比较好的技术,如关于分类学习方面的技术已相当成熟。
缺点是要求内容能容易抽取成有意义的特征,要求特征内容有良好的结构性,并且用户的口味必须能够用内容特征形式来表达,不能显式地得到其它用户的判断情 况。
要实现内容推荐系统总体来说要经过4个大的步骤:
1 搜集数据,即搜集用户的行为资料,其中也包括很多方法,根据我找到的资料与以往的经验来看,web日志可以作为我们的切入点,即我们的数据来源。
2 过滤数据,web日志中有很多无用的信息,我们要把这些无用的信息排除掉,而且要区分出用户和日志数据之间的联系。
3 分析数据,利用分类聚类技术分析出这些日志数据之间的关联性,以及这些日志数据和用户之间的关联性,这也是最重要的一步。
4 输出结果。
有了这个思路之后,我们可以着手做第一步,即日志数据的收集
我们知道,大多数的web服务器都是有自己的日志记录的,比如说apache安装之后有一个logs目录,其中就有它的日志文件,一般说来它有自 己的一个格式,比如说:
1浏览器所在主机的 IP 地址(ip);
2访问日期和时间(date-time);
3客户机与服务器通信所用的方法(methed,get or post);
4客户机请求访问页面的 URL;
5服务器返回的状态(status);
6客户端浏览器的类型;
但是这个日志文件有一些不能克服的问题,或者我不知道如何克服,那么我先说说我的疑问,首先,这个日志文件中记录的是ip地址,据了解,网络中有很多计算 机的ip地址是相同的,因为他们在一个统一的路由后面,这个比例可能达到25%。那么我们就无法根据ip地址来唯一确定一个用户。其次,一般的web服务 器中都会用多个应用,那么其他应用的访问信息对我们来说有可能是多余的。再者,web服务器的日志形式比较单一,灵活性不大,可定制的余地很小,在日志数 据中有效数据所占的比例较小。还有,一些静态文件的请求也会被web服务器记录下来,比如说js文件,css文件,还有图片文件,等等这些东西对内容推荐 来说都是无用的资源。
基于上面3点原因,我认为可以自定义日志数据。为了解决用户唯一性,我们让应用为每一个浏览器生成一个clientId保存在对应的浏览器上,这样该浏览 器只要访问网站,我们就可以确定这个浏览器的唯一性,当然我们仍然不能确定浏览器使用者的唯一性,但是我们可以更进一步,如果浏览器的使用者登陆网站的 话,我们就可以使用用户id来确定用户的唯一性,不过大多数网站用户可能在使用网站的时候并不会登陆,我也是这样,没有关系,即使使用clientId问 题也不会太大,随着社会的发展,计算机的拥有量逐渐增加,一般来说一个人只会使用一台固定的电脑,在公司里尤其是这样。所以我认为clientId的方案 是可行的,也许有人要问,别人的浏览器禁止了cookie怎么办,那么我只能说没有办法,不过还好事实是绝大多数人都没有这样做。
接下来我们可以定义一下我们所需要的日志数据的格式,比如这样,
ip,clientId,userId,url,datetime,get or post等等。
这样数据有效性会大大提高。
在得到较为有效的数据之后,我们还需要对这些数据进行再次过滤:
1 去掉一些非内容的url,这些数据也是无效数据,这些非内容的url需要我们自己手工的统计出来,然后和日志数据中的数据进行比对,将这些非内容数据从日 志数据中清除出去。
2 同时我们也需要把post请求从日志数据中清除出去,或者我们在记录日志的时候根本不应该把post请求记录下来。
经过以上步骤之后我们就可以开始第3个阶段了,统计每个用户的访问的url,对这些url进行访问,得到对应的html中所包含的数据,这些数据都是文 本,将有用的文本提取出来,然后对这些有用的文本进行聚类。这样就可以得到每个用户喜欢的几个类别。
聚类完成之后我们就可以开始分类了,即把最新的文章或者内容和对应的类别进行匹配,匹配成功之后,我们可以认为这个新文章或者内容可以推荐给对应的用户。
问题:以上的流程只适用于没有使用缓存的系统,但是一般大型的网站都会使用varnish,squid等等,使用它们之后我们就无法得到用户访问的日志数 据了,所以如果使用了varnish或者squid,我们不得不再次面对web服务器的日志数据。
在不考虑varnish或者squid的情况下,使用lucene+jamon+htmlparse基本就可以实现以上推荐系统。