问题描述
我正在使用 miller
处理一些 CSV 文件,如下所示:
mlr --mmap --csv --skip-comments -N cut -f 2 my.csv
它运行良好,但有些 CSV 文件包含字段名称,有些不包含,这就是我使用 -N
的原因。在具有字段名称的文件中,它们会打印在输出中。您会认为将 headerless-csv-output
捆绑在 N
标志中他们不会,但他们确实如此。也许这是一个错误?无论如何,如何防止打印字段名称?如果输入需要以某种方式更改并通过管道输入,那很好,但输出正在被唯一处理。
这是我一直在参考的文档:
- https://manpages.ubuntu.com/manpages/focal/man1/mlr.1.html#options
- https://miller.readthedocs.io/en/latest/reference.html
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","2021-06-24"
预期输出
67.213.75.205
192.73.238.101
当前输出
dst_ip
67.213.75.205
192.73.238.101
解决方法
如果您的第一个字段始终是日期,则可以使用它
mlr --csv --skip-comments -N filter -S '$1=~"^[0-9]{4}-"' then cut -f 2 input.txt
,
如果您对具有标题的 CSV 使用 N,您将添加一个自动数字标题,而原始标题将是一个数据行。使用 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