【问题标题】:Match column 1 of CSV, and then check if column 2 matches匹配 CSV 的第 1 列,然后检查第 2 列是否匹配
【发布时间】:2020-04-19 00:32:27
【问题描述】:

我目前有一个 Bash 脚本,它可以从访问日志中抓取特定信息并将其写入 CSV,格式如下:

    0004F2426702,75.214.224.151,16/Apr/2020
    0004F2426702,75.214.224.151,17/Apr/2020
    0004F2426702,75.214.224.151,18/Apr/2020
    0004F2426702,80.111.224.252,18/Apr/2020
    00085D19F072,75.214.224.151,16/Apr/2020
    00085D20A469,75.214.224.151,16/Apr/2020
    0018B9FFDD58,75.214.224.151,16/Apr/2020
    64167F801BF5,81.97.142.178,16/Apr/2020
    64167F801BF5,95.97.142.178,18/Apr/2020
    0004F2426702,80.111.224.252,19/Apr/2020

但是,现在我被困住了!

我想匹配第 1 列(MAC 地址),然后检查第 2 列是否匹配。如果不是,则打印第 1 列匹配的所有行。

此脚本的目的是发现源 IP 是否已更改。

【问题讨论】:

  • 匹配什么?包括所需的输出将有助于弄清楚你想要什么。
  • 因此,对于第 1 列,查找具有相同 MAC 地址的所有条目,然后检查第 2 列/每个条目的 IP 地址是否相同。如果没有,打印每一行的输出,最好是转置日期。以 0004F2426702 为例,我希望得到以下输出: 0004F2426702,75.214.224.151,16/Apr/2020,17/Apr/2020,18/Apr/2020 0004F2426702,80.111.224.252,918/Apr/2020 /2020 年 4 月

标签: bash csv compare match diff


【解决方案1】:

使用我最喜欢的工具 GNU datamash 来完成对数据进行分组和计数的大部分工作:

$ datamash -st, -g1,2 unique 3 countunique 3 < input.csv | awk 'BEGIN {FS=OFS=","} $NF > 1 { NF--; print }'
0004F2426702,75.214.224.151,16/Apr/2020,17/Apr/2020,18/Apr/2020
0004F2426702,80.111.224.252,18/Apr/2020,19/Apr/2020

awk

$ awk 'BEGIN { FS = OFS = SUBSEP = "," }
       { if (++seen[$1,$2] == 1) dates[$1,$2] = $3; else dates[$1,$2] = dates[$1,$2] "," $3 }
       END { for (macip in seen) if (seen[macip] > 1) print macip, dates[macip] }' input.csv
0004F2426702,75.214.224.151,16/Apr/2020,17/Apr/2020,18/Apr/2020
0004F2426702,80.111.224.252,18/Apr/2020,19/Apr/2020

【讨论】:

  • 您的命令适用于该示例,但实际上与我想要的不匹配。在示例中,2 个 MAC 出现了两个不同的 IP 地址。这就是我想要发现的 wjat。 "datamash -st, -g1 unique 2 countunique 2 1 { NF--; print }'" 返回以下内容,属于我追求的东西: 0004F2426702,75.214.224.151,80.111.224.252 64167F801BF5,81.97.142.178,95.97.142.178 但是,显然,这没有关联的日期,所以我无法确定有多少日期 X IP 与给定MAC 地址。
  • 我认为原始样本的最佳输出可能如下:0004F2426702,75.214.224.151,3,80.111.224.252,2 64167F801BF5,81.97.142.178,1,64167F8021BF5,95.97.4 ,1
  • 即 MAC,IP_1,Count_of_IP_1,IP_2,Count_of_IP_2,
猜你喜欢
  • 1970-01-01
  • 2019-06-16
  • 2019-01-08
  • 2016-10-20
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多