AWK - 是否可以按不同字段&&按小时细分日志文件

2024-01-17

Question

我想知道是否可以awk独自闯入 一个日志文件,然后有awk输出一条不同的消息 小时细分 (00-23) 以及该特定时间的计数 小时与不同的消息。

Example

请求的输出

Message1
00 13
01 30
...
23 6

Message2
00 50
01 10
...
23 120
etc, etc

输入文件看起来有点像下面这样:

blah,blah
2016-06-24 00:30:54 blah Message1 7 rand rand2
2016-06-24 00:40:12 blah Message2 35 rand rand2
2016-06-24 00:42:15 blah Message2 12 rand rand2
2016-06-24 00:58:01 blah Message1 5 rand rand2
2016-06-24 00:58:12 blah Message2 3 rand rand2
2016-06-24 01:02:25 blah Message2 2 rand rand2
2016-06-24 01:02:30 blah Message1 3 rand rand2
2016-06-24 01:05:14 blah Message1 10 rand rand2
2016-06-24 01:30:56 blah Message2 5 rand rand2
2016-06-24 01:55:41 blah Message2 3 rand rand2
blah, blah

请注意,这是一个虚构的输入文件。

要获取此输入文件请求的输出,我知道我需要print $4然后在新线上做类似的事情print substr($2,1,2)" "sum[$5]。同样的时间同样的时间$4我必须添加$4在一起了。

Code

另请注意,我必须使用awk3.1.7 所以我不能做任何花哨的新东西awk 4.1.0+.

我知道如何获得不同的信息。

{
msg[$4]++
}
END {
  for (m in msg) {
     print m;
   }
}

要返回小时,我可以做以下事情:

{
msg[$4]++
hr[$4] = substr($2,1,2)
}
END {
  for (m in msg) {
     print m;
     print hr[m];
   }
}

最后,总和是这样的:

{
msg[$4]++
hr[$4] = substr($2,1,2)
sum[$4] += $5
}
END {
  for (m in msg) {
     print m;
     print hr[m]" "sum[m];     
   }
}

非常感谢任何和所有的帮助。


你会想要这样的东西:

$ cat tst.awk
BEGIN { FS="[ :]" }
{ sum[$6,$2]+=$7; msgs[$6]; hrs[$2] }
END {
    for (msg in msgs) {
        print msg
        for (hr in hrs) {
            print hr, sum[msg,hr]+0
        }
        print ""
    }
}

$ awk -f tst.awk file
Message1
00 12
01 13

Message2
00 50
01 10

但显然这有点猜测,因为它是针对您发布的示例输入运行的,但您没有提供相关的预期输出。

顺便说一句,问题主题行AWK - Is it possible...,假设它是关于操纵文本,那么该问题的答案始终是“是”,因此无需询问是否可能。

我刚刚注意到你之前的问题,你说时间可能并不总是出现在你的数据中,所以这可能是你真正想要的:

$ cat tst.awk
BEGIN { FS="[ :]" }
{ sum[$6,$2+0]+=$7; msgs[$6] }
END {
    for (msg in msgs) {
        print msg
        #for (hr=0; hr<=23; hr++) {
        for (hr=0; hr<=4; hr++) {
            printf "%02d %d\n", hr, sum[msg,hr]
        }
        print ""
    }
}
$
$ awk -f tst.awk file
Message1
00 12
01 13
02 0
03 0
04 0

Message2
00 50
01 10
02 0
03 0
04 0

显然将“4”更改为“23”。我还建议您考虑使用 CSV 输出,以便可以导入到 Excel 等,例如:

$ cat tst.awk
BEGIN { FS="[ :]"; OFS="," }
{ sum[$6,$2+0]+=$7; msgs[$6] }
END {
    printf "hr"
    for (msg in msgs) {
        printf "%s%s", OFS, msg
    }
    print ""
    for (hr=0; hr<=4; hr++) {
        printf "%02d", hr
        for (msg in msgs) {
            printf "%s%d", OFS, sum[msg,hr]
        }
        print ""
    }
}

$ awk -f tst.awk file
hr,Message1,Message2
00,12,50
01,13,10
02,0,0
03,0,0
04,0,0

$ awk -f tst.awk file | column -s, -t
hr  Message1  Message2
00  12        50
01  13        10
02  0         0
03  0         0
04  0         0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWK - 是否可以按不同字段&&按小时细分日志文件 的相关文章

随机推荐

  • 如何使用宏获取 Word 文档的当前文件名(不带扩展名或完整路径)?

    我有代码可以提取文件的完整路径 减去扩展名 并且我正在尝试将其修改为仅存储文件名 再次不包含扩展名 Sub ShowFilename Dim pathName As String With ActiveDocument If Len Pat
  • 运行 .msi 安装程序后能否确定生成的命令行?

    如果我想要静默安装 是否有任何简单的方法来运行安装程序 选择所需的选项 然后确定等效安装所需的 msiexec 选项 开关 最好没有实际安装任何东西 不要点击 完成 或者您可以通过挖掘 MSI 数据库来找到所需的属性吗 是的 听起来您需要创
  • 如何保证VirtualAlloc分配的虚拟内存地址在2-4GB之间

    我尝试使用while 但是效果不是很好 有什么办法可以做到吗 bool found false uintptr t memaddr 0 int n 0 while found n lt 10 n 1 memaddr uintptr t Vi
  • 使用 AWS Glue ETL 将多个 parquet 文件合并到 AWS S3 中的单个 parquet 文件 python Spark (pyspark)

    我每 15 分钟运行一次 AWS Glue ETL 作业 每次在 S3 中生成 1 个 parquet 文件 我需要创建另一个作业以在每小时结束时运行 以使用 AWS Glue ETL pyspark 代码将 S3 中的所有 4 个 par
  • COM 与 .NET 6 互操作

    我们有一个用 C 编写的 NET 类库 我们正在尝试将其从 NET Framework v2 0 升级到 NET 6 在 NET 2 0 中 该库通过导入该库的 TLB 的 C 代码进行实例化 使用 为了使用 COM 使用 NET 6 库
  • HTML:更改

    的高度

    如何指定插入空行的高度 p 创造 在您的样式表或样式表部分中 定义以下内容 示例 p margin top 0 6em margin bottom 0em 您也可以在单独的标签中指定它 p p style margin top p
  • 由于“Binder 线程池”,应用程序未在模拟器上运行

    我正在尝试在模拟器上打开应用程序 但无法 在 Logcat 上我得到了这个 10 07 00 23 49 443 1268 1268 E hwservicemanager BINDER SET INHERIT FIFO PRIO faile
  • 如何将这个十六进制字符串转换为长字符串?

    我有 0xE94C827CEB 十六进制但作为字符串 即 1002011000043 dd mm yyyy HH mm ss 不幸的是 如果我只有字符串格式 我不知道如何进行转换 并且我没有 Convert ToLong 0xE94C827
  • usemin revved 文件名和 requirejs 依赖项

    我在 requirejs 和 usemin 中遇到以下问题 我想设置一个多页面应用程序 在其中动态加载仅包含页面特定功能的模块 例如 about gt about js home gt home js 我可以继续将所有内容打包在一个文件中
  • 带有名为“PropertiesController”的控制器的 ASP.NET MVC 路由[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在尝试使用名称为 PropertiesController 的控制器 以及随后的路由 时遇到了一个棘手的问题 请耐心等
  • 如何从命令行运行 R 脚本文件

    我知道关于这个问题有很多问题 但我已经尝试了一切 我想我只是不明白命令行在 Windows 中是如何工作的 我的桌面上的文件夹中保存了一个文件 比方说 C Users abika 000 Desktop R models myfile R
  • urwid - 无限循环的输出屏幕

    我正在尝试制作一个简单的 urwid 作为无限循环的输出屏幕 它需要输出来自另一个类的数据 我现在找到的解决方案是 有一个 Printer 类 实际输出类的测试替换器 和queue属性 当需要显示某些内容时 会将其附加到queue 然后 有
  • 删除索引后是否应该重新编译表?

    我正在删除一些未使用的索引 我通常做的是 确保统计信息已更新 也许索引尚未使用 因为统计信息已经有一段时间没有更新了 为每个涉及的索引生成删除索引脚本和创建索引脚本 运行删除索引命令 update statistics tablename
  • Python VS Code 导入不起作用“无模块名称请求”

    我是 python 新手 刚学了 6 个月的 c 也是 VS Code 来自 VS 的新手 我的错误是 gt 发生异常 ModuleNotFoundError 没有名为 requests 的模块 文件 C Users ryanb Docum
  • Swift 中的 AES128 加密

    我对 AES 128 加密有疑问 iOS 中的加密字符串与 Android 中的加密字符串不同 下面是安卓代码 public class Encryption private static final String ALGORITHM AE
  • CardLayout 显示下一个面板 - java Swing

    我在使用 CardLayout 时遇到一些问题 我有一个面板和一个 下一步 按钮 单击它后我想显示第二个面板 在我的代码中 当我单击 下一步 按钮时 不会显示下一个面板 有人可以帮我解决这个问题吗 package com test impo
  • 如何删除文件中除第一个匹配行之外的重复行

    在下面的配置文件中 etc fine tune conf 我们有重复的行 clean history in os true 我们要删除所有包含以下内容的行clean history in os true除了文件中的第一个匹配行 到目前为止我
  • Firebase 令牌过期和处理刷新令牌的最佳实践

    我目前正在客户端应用程序 基于 Cordova 的移动应用程序 上使用 Firebase 并使用客户端上的 firebase 用户身份验证方法 使用电子邮件和密码登录 FacebookAuthProvider 根据我目前对会议到期的理解和经
  • MSBuild 使用 ItemGroup 和 EXEC 命令

    我创建了代码片段中显示的 ItemGroup 我需要迭代此 ItemGroup 并运行 EXEC 命令 也在代码片段中显示 我似乎无法让它发挥作用 代码返回如下所示的错误 注意 消息被写入 2 次 这是正确的 但 EXEC 命令未正确运行
  • AWK - 是否可以按不同字段&&按小时细分日志文件

    Question 我想知道是否可以awk独自闯入 一个日志文件 然后有awk输出一条不同的消息 小时细分 00 23 以及该特定时间的计数 小时与不同的消息 Example 请求的输出 Message1 00 13 01 30 23 6 M