Grep数据和输出到文件

时间:2011-09-15 06:35:16

标签: sed cygwin grep

我正在尝试从日志文件中提取数据并系统地组织它。我有大约9个日志文件,每个文件大小约为100mb。

我要做的是:从每个日志文件中提取多个,对于每个提取的块,我想创建一个新文件并将提取的数据保存到它。每个块都有一个明确的起点和终点。

基本上,我已经取得了一些进展,并且能够提取我需要的数据,但是,我试图弄清楚如何为每个匹配的块创建一个新文件。

由于环境的限制,我无法使用像Python或Perl这样的编程语言。所以请原谅凌乱的命令。

到目前为止我的命令:

find Logs\ 13Sept/Log_00000000*.log -type f -exec \
sed -n '/LRE Starting chunk/,/LRE Ending chunk/p' {} \; | \
grep -v -A1 -B1 "Starting chunk" > Logs\ 13Sept/Chunks/test.txt

LRE Starting chunkLRE Ending chunk是我的界限。现在我的命令工作,但它将所有匹配的块保存到一个文件(其大小变得过大)。

如何为每场比赛创建文件并将匹配的内容添加到其中?请记住,每个文件可以包含多个块,并且不限于每个文件一个块。

4 个答案:

答案 0 :(得分:2)

可能需要比sed更可编程的东西:我假设awk可用。

awk '
    /LRE Ending chunk/ {printing = 0}
    printing {print > "chunk" n ".txt"}
    /LRE Starting chunk/ {printing = 1; n++}
' *.log

答案 1 :(得分:1)

尝试这样的事情:

find Logs\ 13Sept/Log_00000000*.log -type f -print | while read file; do \
sed -n '/LRE Starting chunk/,/LRE Ending chunk/p' "$file" | \
grep -v -A1 -B1 "Starting chunk" > "Logs 13Sept/Chunks/$file.chunk.txt";
done

循环查找结果并为每个文件执行,然后为每个文件创建一个$ file.chunk.txt。

答案 2 :(得分:1)

或许这样的事情?

find Logs\ 13Sept/Log_00000000*.log -type f -exec \
sed -n '/LRE Starting chunk/,/LRE Ending chunk/{;/LRE .*ing chunk/d;w\
'"{}.chunk"';}' {} \;

这使用sed的w命令写入名为(inputfile).chunk的文件。如果这是不可接受的,也许您可​​以使用sh -c'...'传入一个小的shell脚本来包装sed命令。 (或者是出于某种原因也禁止使用shell脚本?)

答案 3 :(得分:0)

也许您可以使用csplit进行拆分,然后在块末端截断输出文件。