2012-01-05 50 views
1

我需要從一個文本文件中grep幾個模式,這個文本文件由進程不斷更新。在Unix上將動態模式粘貼到不同的文件上

所以我會做:

tail -f file1.txt | egrep --line-buffered 'pattern' | tee pattern.txt 

我的問題是,這些模式需要從文件dinamically拍攝。即:

file1.txt: 
2012-01-05 21:32:41 server1 some_text 
2012-01-05 21:42:51 server1 some_text 
2012-01-05 22:12:43 server2 some_text 
2012-01-05 22:32:11 server3 some_text 
2012-01-05 22:43:14 server3 some_text 
2012-01-05 23:31:21 server2 some_text 
2012-01-05 23:42:11 server1 some_text 

現在我需要將這些行grep到三個分離的文件:server1.txt,server2.txt。 server3.txt,但「server1」,「server2」和「server3」是grep的模式,需要從file1.txt中以dinam取消。如果包含「serverx」的新行被添加到file1.txt中,我需要創建一個serverx.txt文件,並將file1.txt的輸出重定向到這個新文件。

我想我需要tail,grep,awk的組合,但我不知道如何開始。

在此先感謝!

Fran。

+0

從哪裏開始? Perl,http://www.perl.org/ :) – zrvan 2012-01-05 13:20:38

回答

4

怎麼樣:

tail -f file1|awk '/yourPattern/{print $0 >> $3".txt"}' 

沒有測試,但應該工作。

那麼這oneliner會根據您的例子創建服務器{1,2,3} .TXT 3個文件

+0

哇......那很快!謝謝你跟我分享你的知識! – Fracu 2012-01-05 15:30:10

2

輸入文件連續分派到 「模式」 文件:

tail -f file1.txt | 
while read date time server text 
do 
    echo "$date $time $server $text" | tee -a "$server".txt 
done 
+0

@Francisco它是你想要的嗎? – olibre 2012-01-05 13:56:07

+0

謝謝oHessling!我會試一試。然而,肯特的打線員按我的預期工作。 – Fracu 2012-01-05 15:32:07

1

如果tail -f不是madatory,你也可以這樣做:

awk '{print $3}' file1.txt | 
    sort -u | 
    while read pattern 
    do 
    egrep --line-buffered "$pattern" file1.txt | tee "$pattern".txt 
    done