下面是日志文件和预期输出。文件输出应包含他们下载的客户名称和大小。有一个 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/