我有一个非常混乱的简单日志文件,我需要它整洁。该文件包含日志标题,但都混杂在一起,因此我需要根据日志标题对日志文件进行排序。没有静态行数表示文本文件的每个标题没有固定行数。我正在使用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}
答案 0 :(得分:2)
最好使用变量传递,而不是试图使复杂的引用正确。
#!/bin/bash
# usage: pargrep <infile> <searchpattern>
inFile="$1"
searchString="$2"
awk -v selector=$searchString '
BEGIN {
FS="\n"
RS="-----"
}
selector ~ $0 { print }
' "${inFile}"
答案 1 :(得分:2)
稍微调整丹尼斯的回答:
awk -v selector="$searchString" '
BEGIN {
RS = "Car LogFile Header\n"
ORS = "------"
}
selector ~ $0 {
print RS $0
}
' "${inFile}"
请注意,RS
是输入记录分隔符。我用ORS
来说明。
我认为“Car LogFile Header”是不变的。如果这是动态的,请告诉我们。