2

我有一个非常混乱的简单日志文件,我需要它整洁。该文件包含日志头,但都混杂在一起,因此我需要根据日志头对日志文件进行排序。没有静态行数,这意味着文本文件的每个标题没有固定的行数。我正在使用 AWK 来整理标题。

日志文件如下所示:

Car LogFile Header
<text>
<text>
<text>
Car LogFile Header
<text>
Car LogFile Header
<and so forth>

它会像这样输出:

Car LogFile Header
<text>
<text>
<text>
-------------------
Car Logfile Header
<text>
<text>

我已经完成/搜索了一个简单的代码,但它似乎不起作用。有人可以指导我吗?谢谢!

#!/bin/bash

# usage: pargrep <infile> <searchpattern>

inFile="$1"
searchString="$2"

awk '
BEGIN {
    FS="\n"
    RS="-----"
}
/'"$searchString"'/ { print }
' ${inFile}
4

2 回答 2

2

最好使用变量传递而不是尝试正确引用复杂的引用。

#!/bin/bash

# usage: pargrep <infile> <searchpattern>

inFile="$1"
searchString="$2"

awk -v selector=$searchString '
    BEGIN {
        FS="\n"
        RS="-----"
    }
    selector ~ $0 { print }
    ' "${inFile}"
于 2010-09-24T02:10:32.087 回答
2

稍微调整一下丹尼斯的回答:

awk -v selector="$searchString" '
    BEGIN { 
        RS = "Car LogFile Header\n" 
        ORS = "------"
    }
    selector ~ $0 { 
        print RS $0 
    }
' "${inFile}"

请注意,这RS输入记录分隔符。我用来ORS说明的。

我假设“Car LogFile Header”是不变的。如果这是动态的,请告诉我们。

于 2010-09-24T17:08:37.477 回答