我有许多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
有人能指出我正确的方向来完成剩下的工作吗?
答案 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