sed - Grep 数据并输出到文件

标签 sed cygwin grep

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

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

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

由于环境的限制,我无法使用 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 起始 block LRE 结束 block 是我的边界。现在我的命令可以工作,但它将所有匹配的 block 保存到一个文件中(其大小变得过大)。

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

最佳答案

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

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

关于sed - Grep 数据并输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7426769/

相关文章:

java - 在 Cygwin 中设置 Apache Tomcat

linux - 我需要一个 grep 命令,它将仅从 linux 中的/etc/passwd 文件中提取用户名

regex - 有没有一种方法可以使用 grep(或任何其他工具)过滤文本文件,以便您可以获得包含在大括号或方括号中的文件部分?

linux - 如何在每次 grep 找到某些东西时增加变量的值

linux - 获取两行之间的指定内容

linux - sed:如何替换多行模式中的所有内容?

sed - 删除 () 之前和之后的文本

C++ Cygwin 未定义对构造函数的引用

c - 在cygwin中编译linux C程序时遇到问题

regex - 从 sed 加入两个正则表达式