在excel中对大型服务器日志文件进行排序?

问题描述 投票:0回答:3

不知道在哪里问这个但是:

我想在Excel中创建一个宏来对服务器生成的日志进行排序和着色,并对它们进行颜色编码。我在每个文本文件中有3,000多行信息。

这是日志文件的快照:enter image description here

当我把它放到excel中时,所有这些都混杂在一个单元格中,我希望能够按每个单元格排序

Request_path, count, Avg_bytes_sents, etc..

就像它在文本文档中的排序方式一样。我想使用marcos对它进行排序并制作数据透视表,但是当我将它粘贴到excel中时,它看起来没什么问题。

无论如何要对它进行排序而不是实际复制每一行手动将其输入excel?复制10k的日志执行需要永远......

excel vba excel-vba sorting
3个回答
2
投票

如果您有excel 2010或更新版本,只需使用内置的Text to Columns函数指定|作为分隔符?

https://www.extendoffice.com/documents/excel/1786-excel-split-text-by-space.html

或者,像这样的东西应该工作:

Sub Import_Log_File()
    Dim Tmp as String
    Dim L as Integer, Cur_Row as Integer, Cur_Col as Integer
    Tmp = Range("A1").Value
    For L = 9 to Len(Tmp)
        If Right(Left(Tmp,L),9) = "Detailed:" Then
                Tmp = right(Tmp,Len(Tmp)-L)
                Exit For
        End If
    Next L
    L = 1
    Cur_Row = 1
    Cur_Col = 0
    Do
        If Right(Left(Tmp,L),1) = "|" or Right(Left(Tmp,L),1) ="+" Then
                If Cur_Col <> 7 Then
                        Cur_Col = Cur_Col + 1
                    Else
                        Cur_Col = 0
                        Cur_Row = Cur_Row + 1
                End If
                Cells(Cur_Row,Cur_Col) = Left(Tmp, L - 1)
                Tmp = Right(Tmp,Len(Tmp)-L)
                L = 1
            Else
                L =L + 1
        End If
    While L < Len(Tmp)
End Sub

0
投票

我会写一个脚本将这个文本文件转换为csv,然后我会用Excel打开csv。

这个Python脚本会将每一行复制到csv中,因此您需要自己清理标题。

将文件名“serverlog.txt”更改为要解析的文件。

output = open("output.csv", "w")
for line in open("serverlog.txt"):
    parts = (s.strip() for s in line.split("|"))
    output.write(",".join(parts[1:-1]))

0
投票

使用Power Query,根本不需要任何编码。无论数据行数多少,都可以一次导入多个文件

© www.soinside.com 2019 - 2024. All rights reserved.