Sed Grep数据并输出到文件

Sed Grep数据并输出到文件,sed,cygwin,grep,Sed,Cygwin,Grep,我正试图从日志文件中提取数据并系统地组织它。我有大约9个日志文件,每个文件大小约为100mb 我想做的是:从每个日志文件中提取多个块,对于提取的每个块,我想创建一个新文件并将提取的数据保存到其中。每个区块都有一个明确的起点和终点 基本上,我已经取得了一些进展,并且能够提取所需的数据,但是,我在试图找出如何为每个匹配的块创建新文件方面遇到了困难 由于环境的限制,我无法使用Python或Perl之类的编程语言。所以请原谅这混乱的命令 到目前为止,我的命令是: find Logs\ 13Sept/Lo

我正试图从日志文件中提取数据并系统地组织它。我有大约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起始块
LRE结束块
是我的边界。现在我的命令可以工作了,但它将所有匹配的块保存到一个文件中(该文件的大小正在变大)


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

尝试以下方法:

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。

类似的内容

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脚本出于某种原因也被禁止?

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

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

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

每个匹配的文件中是有一个块,还是有几个块?除了如何为每个提取的块生成文件名之外,这其实并不重要。另外,我是否正确解释了最终grep的意图,是否要删除起始块分隔符?如果是这样的话,-B1到底是怎么回事?它将包括分隔符?@triplee:grep命令可能有点混乱,但我的意图是在每个匹配的开始处添加+1行,在结束处添加+1行。那么您想要前一个块中的最后一行,以及此块中的第一行,而不是其他行?您仍然应该澄清预期的输出和输入的结构。