我有一个如下所示的日志文件:
www.domainone.com FIX 3.3 12.12.123.1
www.domainone.com FIX 3.4 12.12.123.1
www.domainone.com FIX 2.4 12.12.123.1
www.domaintwo.com MAX 1.4 44.15.153.5
www.domaintwo.com MAX 3.2 44.15.153.5
www.domaintwo.com MAX 3.9 44.15.153.5
www.domaintwo.com MAX 12.4 44.15.153.5
www.domainthree.com NAN 3.4 34.45.144.7
www.domainthree.com NAN 2.4 34.45.144.7
www.domainthree.com NAN 3.2 34.45.144.7
www.domainthree.com NAN 3.3 34.45.144.7
www.domainthree.com NAN 1.4 34.45.144.7
我想运行grep,awk,sed或其他bash命令/脚本,将最后一列拆分该日志文件,因此结果是使用没有点的IP命名的3个日志文件。所以,其中一个是34.45.144.7.log并且有
www.domainthree.com NAN 3.4 34.45.144.7
www.domainthree.com NAN 2.4 34.45.144.7
www.domainthree.com NAN 3.2 34.45.144.7
www.domainthree.com NAN 3.3 34.45.144.7
www.domainthree.com NAN 1.4 34.45.144.7
我能够对它们进行排序,并使用awk从原始日志中删除一些列,但不知道如何使用一列拆分成文件。
答案 0 :(得分:3)
如果IP始终是第四列,则可以使用
awk '{ filename=$4".log"; if (prev && (filename != prev)) close(prev); print >>filename; prev=filename }' ips.log
或根据@Ed Morton,甚至更好
awk '{ print >>($4".log"); close($4".log") }' ips.log
这会将整行打印到由第四列(IP)+“。log”
组成的文件中这是使用Ubuntu 12.04和GNU awk 3.1.8。
答案 1 :(得分:1)
所以结果是3个日志文件使用IP 命名而没有 点强>
awk '{f=$4; gsub(/\./,"",f);print > f".log"}' ips.log
答案 2 :(得分:1)
@ OlafDietsche的要求:
awk '{ filename=$4".log"; if (filename != prev) close(prev); print >filename; prev=filename }' ips.log
没想到这些评论拖延了很长时间,或者我已经做到了这一点!