【问题标题】:Miller - Ignore valid field names when using -NMiller - 使用 -N 时忽略有效的字段名称
【发布时间】:2021-09-08 07:33:34
【问题描述】:

我正在使用miller 来处理一些 CSV 文件,如下所示:

mlr --mmap --csv --skip-comments -N cut -f 2 my.csv

它运行良好,但有些 CSV 文件包含字段名称而有些不包含,这就是我使用 -N 的原因。在具有字段名称的文件中,它们会打印在输出中。您会认为将headerless-csv-output 捆绑在N 标志中它们不会,但它们确实如此。也许这是一个错误?无论如何,我将如何防止字段名称被打印?如果需要以某种方式更改输入并通过管道输入,那很好,但输出是唯一处理的。

这是我一直在参考的文档:

my.csv

################################################################
#                                                              #
#                                                              #
#                      BIG OL' COMMENT BLOCK                   #
#                                                              #
#                                                              #
################################################################
#
"first_seen_utc","dst_ip","dst_port","c2_status","last_online"
"2021-01-17 07:30:05","67.213.75.205","443","online","2021-06-24"
"2021-01-17 07:44:46","192.73.238.101","443","online","2021-06-24"

预期输出

67.213.75.205
192.73.238.101

目前的输出

dst_ip
67.213.75.205
192.73.238.101

【问题讨论】:

  • 您能否添加一些输入行以及您想要的示例输出?
  • @aborruso 完成!

标签: csv miller unix-text-processing


【解决方案1】:

如果您的第一个字段始终是日期,则可以使用它

mlr --csv --skip-comments -N filter -S '$1=~"^[0-9]{4}-"' then cut -f 2 input.txt

【讨论】:

    【解决方案2】:

    如果您将 N 用于具有标题的 CSV,您将添加一个自动数字标题,原始标题将是一个数据行。使用N,您还将拥有--implicit-csv-header

    +---------------------+----------------+----------+-----------+-------------+
    | 1                   | 2              | 3        | 4         | 5           |
    +---------------------+----------------+----------+-----------+-------------+
    | first_seen_utc      | dst_ip         | dst_port | c2_status | last_online |
    | 2021-01-17 07:30:05 | 67.213.75.205  | 443      | online    | 2021-06-24  |
    | 2021-01-17 07:44:46 | 192.73.238.101 | 443      | online    | 2021-06-24  |
    +---------------------+----------------+----------+-----------+-------------+
    

    如果你想要一个无标题的输出,你必须只使用它。如果你跑

    mlr --csv --skip-comments --headerless-csv-output cut -f dst_ip input.txt
    

    你会有

    67.213.75.205
    192.73.238.101
    

    【讨论】:

    • 我的情况是我有多个 CSV 文件,有些有有效的标题,而另一些没有。我想要一个对他们都有效的命令,并且只需要指定一个数字列。我知道你描述的功能。
    • @T145 你能分享一个错误的 CSV 输入吗?
    • 没有“正确”或“错误”的 CSV 输入:只有有效的 CSV 文件有或没有有效的标题。我希望 one 命令适用于任何一种情况。 -N 标志涵盖了无效标头情况。现在我需要编辑当前命令以涵盖有效的标题情况,而不是非此即彼。
    • @T145 我已经问过你,只是为了构建一个对所有类型的输入都有效的命令。我添加了另一个答案
    猜你喜欢
    • 2022-12-04
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2015-02-23
    • 2016-11-28
    • 2014-06-14
    相关资源
    最近更新 更多