如何修剪一个巨大的文本文件?

时间:2015-07-19 13:48:52

标签: logging trim irc

所以我现在已经使用Willie大约8个月了,它记录了它运行的IRC频道中发生的所有内容的raw.log。现在,问题在于它记录了很多不必要的,好的,臃肿的。

以下是一个例子:

<<1419986827.01 :BotSelig!willie@Snoonet-bhs.ien.kdgglt.IP NICK Snoo62763
>>1419986827.04 PRIVMSG Snoo62763 :TypeError: not all arguments converted during string formatting (file "C:\Python27\willie\willie\coretasks.py", line 254, in track_nicks)
<<1419986827.12 :Snoo62763!willie@Snoonet-bhs.ien.kdgglt.IP PRIVMSG Snoo62763 :TypeError: not all arguments converted during string formatting (file "C:\Python27\willie\willie\coretasks.py", line 254, in track_nicks)
<<1419986827.22 :NickServ!NickServ@services.snoonet.org NOTICE Snoo62763 :Welcome to Snoonet, Snoo62763! Here on Snoonet, we provide services to enable the registration of nicknames and channels! For details, type /msg NickServ help and /msg ChanServ help.
<<1419986832.84 :venn177!venn177@user/venn177 PRIVMSG #RLB :uh, well, this seems to work
<<1419986832.84 :venn177!venn177@user/venn177 PRIVMSG #RLB :in any case, let's try this
>>1419986852.92 QUIT :KeyboardInterrupt
>>1419986861.61 CAP LS
>>1419986861.61 NICK BotSelig
>>1419986861.62 USER willie +iw BotSelig :Willie Embosbot, http://willie.dftba.net
<<1419986861.67 :veronica.snoonet.org NOTICE Auth :*** Looking up your hostname...

所有这一切,我唯一想要保留的是在&#34; #RLB之后发生的文字:&#34;。我想保留每一行文字&#39;仍然在自己的线上,但削减所有不必要的绒毛。那么我怎样才能读取文本文件的每一行,检查它是否有&#34; #RLB:&#34;在其中,然后只保存之后发生的所有事情?

最终目标是拥有数据库来生成马尔可夫链,这显然不会影响那里的所有膨胀。 (我实际上并不知道是否有助于了解这一点)

我想另一种说明方式是,我想采取那里所说的内容,然后将其修改为:

uh, well, this seems to work
in any case, let's try this

1 个答案:

答案 0 :(得分:2)

这是一个Perl解决方案:

perl -i -ne 'print if s/^.*?#RLB ://' log.txt

(我假设是一个unixish shell。在Windows中单引号不起作用,你必须使用双引号:-ne "..."

-i表示它会修改文件。
-n为每一行运行提供的代码 -e ...在命令行上指定代码。

代码本身使用基于正则表达式的搜索/替换指令。我们正在寻找

^       # beginning of line
.*?     # anything (any character, 0 or more times, as few as possible)
#RLB :  # the text "#RLB :"

并将其替换为空,从而将其删除。这样只留下文本。

我们只输出已成功修改的行。这有效地过滤掉所有其他行,留下消息。