Sed Grep数据并输出到文件
我正试图从日志文件中提取数据并系统地组织它。我有大约9个日志文件,每个文件大小约为100mb 我想做的是:从每个日志文件中提取多个块,对于提取的每个块,我想创建一个新文件并将提取的数据保存到其中。每个区块都有一个明确的起点和终点 基本上,我已经取得了一些进展,并且能够提取所需的数据,但是,我在试图找出如何为每个匹配的块创建新文件方面遇到了困难 由于环境的限制,我无法使用Python或Perl之类的编程语言。所以请原谅这混乱的命令 到目前为止,我的命令是:Sed Grep数据并输出到文件,sed,cygwin,grep,Sed,Cygwin,Grep,我正试图从日志文件中提取数据并系统地组织它。我有大约9个日志文件,每个文件大小约为100mb 我想做的是:从每个日志文件中提取多个块,对于提取的每个块,我想创建一个新文件并将提取的数据保存到其中。每个区块都有一个明确的起点和终点 基本上,我已经取得了一些进展,并且能够提取所需的数据,但是,我在试图找出如何为每个匹配的块创建新文件方面遇到了困难 由于环境的限制,我无法使用Python或Perl之类的编程语言。所以请原谅这混乱的命令 到目前为止,我的命令是: find Logs\ 13Sept/Lo
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行。那么您想要前一个块中的最后一行,以及此块中的第一行,而不是其他行?您仍然应该澄清预期的输出和输入的结构。