2

我有一个看起来像这样的日志文件:

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 命令/脚本,该命令/脚本将按最后一列拆分该日志文件,因此结果是 3 个使用 IP 命名的日志文件,不带点。所以,其中之一是 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 对它们进行排序并从原始日志中删除一些列,但不知道如何使用一列拆分为文件。

4

3 回答 3

4

如果 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。

于 2012-11-28T14:41:26.847 回答
1

应@OlafDietsche 的要求:

awk '{ filename=$4".log"; if (filename != prev) close(prev); print >filename; prev=filename }' ips.log

没想到评论会拖这么久,否则我会立即这样做!

于 2012-11-29T22:06:59.167 回答
1

所以结果是 3 个使用 IP 命名的日志文件,不带点

awk '{f=$4; gsub(/\./,"",f);print > f".log"}' ips.log
于 2012-11-28T14:46:43.060 回答