gpt4 book ai didi

bash - 需要在 bash 中解析日志文件

转载 作者:行者123 更新时间:2023-11-29 09:06:54 26 4
gpt4 key购买 nike

我有一个包含很多文本的日志文件,其中一些是无用的。在此日志中,有几行对我很重要。这些行的模式是:

 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld.so.1]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]

在对我来说重要的所有行上都可以找到 NEEDED 关键字。 [] 之间的关键字对我来说很重要。我需要创建所有这些字符串的列表,而不是重复它们。

我已在 Python 上完成此操作,但在我要运行脚本的机器上似乎没有可用的 Python,因此我需要在 bash 中重新编写脚本。我只知道 bash 中的基本知识,我找不到解决我的问题的方法。

我使用的 Python 脚本是:

import sys
import re


def testForKeyword(keyword, line):
findStuff = re.compile(r"\b%s\b" % keyword, \
flags=re.IGNORECASE)

if findStuff.search(line):
return True
else:
return False

# Get filename argument
if len(sys.argv) != 2:
print("USAGE: python libraryParser.py <log_file.log>")
sys.exit(-1)

file = open(sys.argv[1], "r")

sharedLibraries = []
for line in file:
if testForKeyword("NEEDED", line):
libraryNameStart = line.find("[") + 1
libraryNameFinish = line.find("]")

libraryName = line[libraryNameStart:libraryNameFinish]

# No duplicates, only add if it does not exist
try:
sharedLibraries.index(libraryName)
except ValueError:
sharedLibraries.append(libraryName)

for library in sharedLibraries:
print(library)

你能帮我解决这个问题吗?提前致谢。

最佳答案

$ awk -F'[][]' '/NEEDED/ {print $2}' data.txt | sort | uniq
ld.so.1
libc.so.6
libgcc_s.so.1
libm.so.6

仅限 awk:

$ awk -F'[][]' '/NEEDED/ {save[$5]++}END{ for (i in save) print i}' data.txt
libc.so.6
libm.so.6
libgcc_s.so.1
ld.so.1

简化您的 Python 代码:

#!/usr/bin/env python

libs = []

with open("data.txt") as fd:
for line in fd:
if "NEEDED" in line:
libs.append(line.split()[4])

for i in set(libs):
print i

Bash 解决方案(没有唯一库)

#!/bin/bash

while IFS='][' read -a array
do
echo ${array[1]}
done < data.txt

关于bash - 需要在 bash 中解析日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603606/

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