2011-04-12 31 views
0

嘿,所有對不起,在這裏發佈我找不到任何答案,我的解決方案無法正常工作。我正在寫在下面的時尚日誌文件(不要問):在各行之間進行閱讀(perl或awk)

============================= 

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開始並在等號之間打印所有內容:

Eg

============================= 
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腳本。有什麼想法嗎?


好吧,這個工作(那種)

​​

在這個意義上,很多被剝奪了。現在我有另一個選擇性印刷a-la awk。通常情況下,我可以使用的東西之前得到行:

echo " 
test 
hello 
foo 
bar" | awk '/foo/{print x};{x=$0}' 

將打印測試,但還沒有找到一種方式來獲得的單詞測試(永遠是一個不同的詞,但這個詞foo將永遠留) 。任何考生(順便提前非常感謝)

+0

我有點迷路'如果變量1存在,則從變量2開始。你能解釋一下嗎? – 2011-04-12 16:36:45

+0

我想他正在試圖在兩行之間進行匹配,比如'/ Variable1/.../Variable2 /' – Geo 2011-04-12 16:39:21

+0

@Geo那將不會打印'等號之間的所有內容' – 2011-04-12 16:42:16

回答

1
local $/ = "\n=============================\n"; 
while (<>) { 
    chomp; 
    ... 
} 

備選:

my $rec = ''; 
while (<>) { 
    if (!/^=============================$/) { 
     $rec .= $_; 
     next; 
    } 

    ... 

    $rec = ''; 
} 

$/chomp

0

我不上,如果完全清楚 「變量1/2」 等是不變字符串或實際上不同的數量級,但這樣做的工作:

if [ $(grep Variable1 $file | wc -l) -gt 0 ]; then 
    sed -n '/Variable2/,/=======/' $file 
fi 
+1

你想'if grep -q Variable1 $ file;那麼...'而不是 – 2011-04-12 19:45:15