【问题标题】:how to use grep to parse out columns in csv如何使用 grep 解析出 csv 中的列
【发布时间】:2017-01-29 21:40:19
【问题描述】:

我有一个包含数百万行这样的日志

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) 然后将 data[0],data[4],data[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?

谢谢

【问题讨论】:

    标签: python-2.7 parsing grep zgrep


    【解决方案1】:

    要选择列,您必须使用剪切命令 zgrep/grep 选择行 所以你可以像这样使用剪切命令

    cut -d' ' -f1,2,4

    在这个例子中,我得到第 1 2 和 4 列,以空格 ' ' 作为列的分隔符 你应该知道 -f 选项用于指定列数和 -d 用于分隔符。

    希望我已经回答了你的问题

    【讨论】:

    • 嗨,我一直在尝试运行它,但它似乎挂起了我的语法:zgrep logFile.gz | cut -d' ' -f1,3,4 > file.txt 我做错了什么吗?
    • 我认为 zgrep 应该有另一个参数来满足你想要的线,所以如果你不想过滤抛出线,就不要使用它。 """" 这应该可以工作:zcat logFile.gz|cut -d' ' -f1,3,4 """"" zcat 像 cat 一样工作,但它适用于 gz file>file.txt
    • 这是我运行的命令:zcat logFile.gz|cut -d' ' -f1,3,4 >> file.txt 我刚刚收到此错误can't stat: logFile.gz (logFile.gz.Z): No such file or directory
    • 尝试使用gunzip -cgzcat 代替zcat gunzip -c logFile.gz|cut -d' ' -f1,3,4 >> file.txtgzcat logFile.gz|cut -d' ' -f1,3,4 >> file.txt
    • 这是另一个你应该看看的链接magnatecha.com/zcat-adds-z-in-mac-os
    【解决方案2】:

    我在 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 列从大文件过滤到小文件,同时将源和目标都保持为压缩格式。

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2015-10-05
      • 1970-01-01
      相关资源
      最近更新 更多