我有一个包含数百万行的日志
1482364800 bunch of stuff 172.169.49.138 252377 + many other things
1482364808 bunch of stuff 128.169.49.111 131177 + many other things
1482364810 bunch of stuff 2001:db8:0:0:0:0:2:1 124322 + many other things
1482364900 bunch of stuff 128.169.49.112 849231 + many other things
1482364940 bunch of stuff 128.169.49.218 623423 + many other things
它太大了以至于我无法真正将其读入内存以便python解析所以我想只将我需要的项目zgrep放到另一个较小的文件中但我对grep不是很好。在python中我通常会打开.gzip(log.gz),然后将数据[0],数据[4],数据[5]拉出到一个新文件,这样我的新文件只有epoc和ip和日期(ip可以是ipv6或4)
新文件的预期结果:
1482364800 172.169.49.138 252377
1482364808 128.169.49.111 131177
1482364810 2001:db8:0:0:0:0:2:1 124322
1482364900 128.169.49.112 849231
1482364940 128.169.49.218 623423
我该怎么做zgrep?
由于
答案 0 :(得分:1)
要选择列,必须使用cut命令zgrep / grep选择行 所以你可以像这样使用剪切命令
cut -d' ' -f1,2,4
在这个例子中,我得到了带有空格的列1 2和4。 '作为列的分隔符 你应该知道-f选项用于指定列数,-d用于分隔符。
我希望我已经回答了你的问题
答案 1 :(得分:0)
我在OSX上,也许这就是问题,但我无法让zgrep过滤掉列。并且zcat在.gz的末尾添加了.Z。这就是我最终做的事情:
awk '{print $1,$3,$4}' <(gzip -dc /path/to/source/Largefile.log.gz) | gzip > /path/to/output/Smallfile.log.gz
这让我可以将我需要的3列从Largefile过滤到Smallfile,同时保持源和目标的压缩格式。