gpt4 book ai didi

sorting - 按日期合并多个日志文件,包括多行

转载 作者:行者123 更新时间:2023-12-02 01:07:58 24 4
gpt4 key购买 nike

我有几个包含以时间戳开头的行的日志,因此以下内容可以按预期合并它们:

cat myLog1.txt myLog2.txt | sort -n > combined.txt

问题是,myLog2.txt 还可以包含没有时间戳的行(例如 java 堆栈跟踪)。有没有一种简单的方法,无需任何自定义脚本即可合并它们并保留多行内容?

示例myLog1.txt

11:48:18.825 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
11:48:55.784 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema

示例myLog2.txt

11:48:35.377 [qtp1484319352-19] ERROR c.w.b.c.ControllerErrorHandler -
org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'org.joda.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate for value '[2013-03-26]'; nested exception is java.lang.IllegalArgumentException: Invalid format: " [2013-03-26]"
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:68) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:45) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:595) ~[spring-context-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:98) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-3.2.1.RELEAS

预期输出

11:48:18.825 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
11:48:35.377 [qtp1484319352-19] ERROR c.w.b.c.ControllerErrorHandler -
org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'org.joda.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat org.joda.time.LocalDate for value '[2013-03-26]'; nested exception is java.lang.IllegalArgumentException: Invalid format: " [2013-03-26]"
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:68) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:45) ~[spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:595) ~[spring-context-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:98) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) ~[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) ~[spring-web-3.2.1.RELEAS
11:48:55.784 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate - HHH000396: Updating schema

谢谢马可

最佳答案

我一直在努力解决同样的问题,最后我想我已经解决了。尝试这样做:

sort -nbms -k1.1,1.2 -k1.4,1.5 -k1.7,1.8 -k1.10,1.12 myLog1.txt myLog2.txt > combined.txt

我自己还是不太清楚,不过我会尝试给出一些解释。根据手册页使用的开关含义:

-n, --numeric-sort - compare according to string numerical value.

-b, --ignore-leading-blanks - ignore leading blanks.

-s, --stable - stabilize sort by disabling last-resort comparison

-m, --merge - merge already sorted files; do not sort

-k, --key=POS1[,POS2] - start a key at POS1 (origin 1), end it at POS2 (default end of line)

  • 日志文件已经排序,因此我们不需要再次对它们进行排序,只需确定合并后的哪一行。这就是为什么-m 。防止堆栈跟踪困惑至关重要。
  • -b在这种情况下没有必要,因为不知何故 -n-m组合可以防止堆栈跟踪行聚集。我留下它是为了以防万一,因为大多数堆栈跟踪行都以空格开头。
  • -n显然,每当 key 中存在非数字字符时,就会停止比较 key 。这是保持堆栈跟踪到位的第二个关键点。重要的是如果它是 -n -k1,1它只会按小时对日志文件进行排序,因为冒号不是数字。除此之外-n加速数字比较,所以我们无论如何都想要它。
  • 上一点提到的问题是通过指向每个键中特定字符位置来解决的,这就是为什么 -k1.1,1.2 (小时的第一个和第二个数字)-k1.4,1.5 (分钟的第一个和第二个数字)等等。点之前的第一个数字始终为“1”,因为它指向文件行的第一列(在我们的例子中是时间)。很快就-kA,B哪里AB是给定行中的列位置(默认情况下,行由空格分隔)。 A 和 B 使用的格式是 .. 请记住,只要 A 之间有非数字字符,和B如果 -n 比较的话,它后面的所有内容都将被忽略使用过。
  • -s禁用默认行为,即:只要进行比较的键是相同的完整字符串,就会完成行的比较。我们不希望保留原始日志条目的顺序。不确定 -m 是否有必要不过。

关于sorting - 按日期合并多个日志文件,包括多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com