我有一个文本文件(以空格作为定界符),如下所示:
Date Time---------OtherFields-------Source IP Destination IP
2014-11-24 12:58:59.290 1.2.3.4 5.6.7.8
2014-11-24 12:59:01.402 1.2.3.8 5.6.7.8
2014-11-24 13:00:01.542 12.14.25.1 5.6.7.8
2014-11-25 14:00:02.5 12.14.25.2 5.6.7.8
2014-11-25 15:00:01.542 12.14.25.1 6.7.8.9
2014-11-25 16:00:01.542 12.14.25.5 6.7.8.9
对于目标IP 5.6.7.8,我想选择具有最新日期和时间的行,并将其保存在新的文本文件中以进行进一步处理。同样的情况适用于所有不同的目标IP地址。有成排的这样的行。
所述期望的输出应该是这样的。
2014-11-25 14:00:02.5 12.14.25.2 5.6.7.8
2014-11-25 16:00:01.542 12.14.25.5 6.7.8.9
没有逻辑可以点击给我,任何帮助将不胜感激。谢谢
for dest in $(awk '{print $NF}' mylogfile | sort | uniq)
do
grep ${dest} mylogfile | sort -k1 -k2 | tail -1
done
1 $(awk '{print $NF}' mylogfile | sort | uniq)
打印日志文件中每行的最后一个字段,这是您的目标IP。对其进行排序,以使相同的IP地址位于连续的块中。uniq将仅打印相同行大块的一个实例
2 & 4 do ... done
我认为这些是自我解释。通用循环构造
3 grep ${dest} mylogfile | sort -k1 -k2 | tail -1
查找具有一个IP地址的行(假定此ip地址不在其他字段中重复,而在最后一个字段中重复),首先对字段1进行排序,然后对字段2进行排序,最新的日期/时间戳记落在最后一行。tail -1
抓住了最后一行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句