我正在尝试从日志文件中提取数据并系统地组织它。我有大约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 chunk
和LRE Ending chunk
是我的界限。现在我的命令工作,但它将所有匹配的块保存到一个文件(其大小变得过大)。
如何为每场比赛创建新文件并将匹配的内容添加到其中?请记住,每个文件可以包含多个块,并且不限于每个文件一个块。
答案 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
进行拆分,然后在块末端截断输出文件。