解析AWS VPC流日志以获取唯一IP

时间:2016-05-22 05:35:15

标签: amazon-web-services grep amazon-vpc vpc

我有许多AWS VPC流日志(它们都是文本文件),需要对它们进行筛选以查找特定范围内的唯一IP。

我知道我可以使用grep命令逐个搜索所有文件,并将结果输出到新文件,但grep显示包含搜索词的整行。我想要做的是,一旦grep找到一个以某个第一个和第二个八位字节开头的IP地址,我想将两个IP地址和两个数字复制到一个新文件中,并且该文件没有任何重复项。< / p>

如果我有以下日志:

004935:2016-05-08T02:05:42.000Z 2 531988440191 eni-7e2eee06 10.97.14.19 10.98.14.173 2222 52342 6 3 164 1462673142 1462673202 ACCEPT OK

004935:2016-05-08T02:05:42.000Z 2 531988440191 eni-7e2eee06 10.96.14.173 10.97.14.13 3333 52334 6 3 164 1462673142 1462673202 ACCEPT OK

004935:2016-05-08T02:05:42.000Z 2 531988440191 eni-7e2eee06 10.1.8.3 10.2.9.9 3333 52334 6 3 164 1462673142 1462673202 ACCEPT OK

004935:2016-05-08T02:05:42.000Z 2 531988440191 eni-7e2eee06 10.96.14.173 10.99.14.13 3333 52334 6 3 164 1462673142 1462673202 ACCEPT OK

004935:2016-05-08T02:05:42.000Z 2 531988440191 eni-1f0eee06 10.96.14.173 10.99.14.13 3333 52334 6 3 164 1462673142 1462673202 ACCEPT OK

...我想使用grep搜索从10.97开始的所有IP。从10.96开始。

根据这些示例日志,我想在新的文本文件中看到以下内容(没有空行):

10.97.14.19 10.98.14.173 2222 52342

10.96.14.173 10.97.14.13 3333 52334

到目前为止,我有命令:

grep -r '10\.97\.\|10\.96\.' * > ../results.log

有人能指出我正确的方向来完成剩下的工作吗?

3 个答案:

答案 0 :(得分:0)

粗暴的方式,但我想它应该有所帮助。 grep -ir '10\.97\.\|10\.96\.' /tmp/<yourfiles> | awk '{print $5, $6, $7, $8}' > /results.log

答案 1 :(得分:0)

您发布的预期输出与您想要执行的操作的描述不符,因为它错过了10.96.14.173 10.99.14.13 3333 52334行。这就是你所描述的:

$ awk '{$0=$5 FS $6 FS $7 FS $8} /(^| )10\.9[67]\./ && !seen[$0]++' file
10.97.14.19 10.98.14.173 2222 52342
10.96.14.173 10.97.14.13 3333 52334
10.96.14.173 10.99.14.13 3333 52334

如果那不符合您的要求,请编辑您的问题以澄清您的要求。

答案 2 :(得分:0)

有一种工具可以在AWS市场中完成这项工作并且价格便宜。它是使日志实际可用的一个很好的附加组件。值得一试:https://aws.amazon.com/marketplace/pp/B074N3YQ1P