【发布时间】:2011-08-04 01:25:45
【问题描述】:
大家好,很抱歉在这里发布这个我无法在任何地方找到答案,我的解决方案也不起作用。我有一个正在以下列方式写入的日志文件(不要问):
=============================
04-12-2011 11:37:10 SOMETHING_GOES_HERE
Variable1
Something Goes Here
=============================
04-12-2011 11:37:20 SOMETHING_GOES_HERE
Variable2
Anything different may be here
=============================
04-12-2011 11:37:30 SOMETHING_GOES_HERE
Variable3
is altogether different here
=============================
我想做的(在 perl 或 awk 中,因为这是一个 RTOS)是:
查看文件,如果 Variable1 存在,则从 Variable2 开始,打印等号之间的所有内容:
例如
=============================
04-12-2011 11:37:10 SOMETHING_GOES_HERE
Variable1
Mary had a little lamb
=============================
04-12-2011 11:37:20 SOMETHING_GOES_HERE
Variable2
The cow jumped over the moon
=============================
awk '/Mary had/{getline;getline;getline;print}'
只会打印
04-12-2011 11:37:20 SOMETHING_GOES_HERE
但我需要的是等号之间的所有内容。我尝试处理一个也不起作用的 perl 脚本。有什么想法吗?
好吧,这行得通(有点)
#!perl -w
use strict;
my $LOGFILE = "/home/mydir/MyTestFile";
open my $fh, "<$LOGFILE" or die("could not open log file: $!");
my $in = 0;
while(<$fh>)
{
$in = 1 if /Variable1/i;
print if($in);
$in = 0 if /Variable2/i;
}
从某种意义上说,很多东西都被剥离了。现在我的另一个 q 是选择性打印 a-la awk。通常,我可以在使用以下内容之前获得该行:
echo "
test
hello
foo
bar" | awk '/foo/{print x};{x=$0}'
将打印 test,但尚未找到获取单词 test 的方法(将始终是不同的单词,但单词 foo 将始终保留)。任何接受者(顺便说一句,提前感谢)
【问题讨论】:
-
我对@987654327@ 有点迷茫。你能解释一下吗?
-
我认为他试图在两行之间进行匹配,例如
/Variable1/ ... /Variable2/ -
@Geo 那不会打印
everything between the equal signs
标签: perl scripting awk while-loop sh