linux - 我有一个日志文件,我需要在其中获取指定的输出,并且需要在 shell 脚本中编写逻辑

标签 linux bash shell unix awk

下面是日志文件和预期输出。文件输出应包含他们下载的客户名称和大小。有一个 CustomerName:John 已下载两次,因此在最终输出中我需要获取他下载的总大小。我需要编写 shell 脚本的帮助。

谢谢

01-01-2012 01:13:36 Blah blah : blah CustomerName:Sam downloaded Blah Size:5432 bytes Carrier:Company-A 
01-01-2012 01:13:45 Blah blah : blah CustomerName:John downloaded Blah Size:38655 bytes Carrier:Company-S 
01-01-2012 01:13:47 Blah blah : blah CustomerName:Dave downloaded Blah Size:25632 bytes Carrier:Company-A 
01-01-2012 01:13:50 Blah blah : blah CustomerName:John downloaded Blah Size:7213 bytes Carrier:Company-S 
01-01-2012 01:13:58 Blah blah : blah CustomerName:Kristy downloaded Blah Size:70100 bytes Carrier:Company-V

预期输出

CustomerName: Sam Size: 5432
CustomerName: John Size: 45868
CustomerName: Dave Size: 25632
CustomerName: Kristy Size: 70100

最佳答案

试试这个-

awk -F '[ :]' '{name[$11]++ ; size[$11]+=$15} END \
{for (i in name) print "CustomerName: ", i, "Size:" size[i]}' test

其中 test 是输入文件的名称。

输出-

CustomerName:  Dave Size:25632
CustomerName:  John Size:45868
CustomerName:  Sam Size:5432
CustomerName:  Kristy Size:70100

说明-

-F '[ :]' 将分隔符设置为空格:。因此,各列的编号不同。

我定义了两个数组。数组 name 包含不同人的名字。 数组 size 具有基于人员姓名的键,但包含下载的大小。

END 之后的部分中,我迭代 name 数组中的名称,并简单地获取名称和大小的值。我还根据您的问题在 print 部分添加了一些文本。

关于linux - 我有一个日志文件,我需要在其中获取指定的输出,并且需要在 shell 脚本中编写逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42196550/

相关文章:

CMake 适用于 Mac,但不适用于 Linux?

c++ - 使用 inotify 时缺少/dev/sdX 的通知

linux - Nagios 未从另一台服务器的文件中读取值

shell - 将多个日期作为参数传递给 Hive 查询

linux - 用于将日志文件复制到单个压缩文件中的 shell 脚本

linux - 打印文件的前 N ​​个字

c - read() write() 通过 dup2() 与 stdin 和 stdout 写入 pipe()

linux - bash 重定向 stdout 和 stderr 以通过 ssh 分隔命令

linux - 在shell中执行命令并打印出摘要(时间+内存)?

Bash:回显以 "-"开头的字符串