2012-01-05 2 views
1

프로세스에 의해 지속적으로 업데이트되는 텍스트 파일에서 여러 패턴을 grep해야합니다. 유닉스에서 다른 파일에 동적 패턴 추출하기

그래서 내가 할 것이다 :

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 

이제 이러한 줄을 server1.txt, server2.txt라는 세 개의 분리 된 파일로 grep해야합니다. server3.txt이지만 "server1", "server2"및 "server3"은 grep의 패턴으로 file1.txt에서 dinamically 가져와야합니다. "serverx"를 포함하는 새로운 행이 file1.txt에 추가되면 serverx.txt 파일을 생성해야하고 file1.txt의 출력이이 새 파일로 리디렉션되어야합니다.

꼬리, grep, awk의 조합이 필요하다고 생각하지만 시작하는 방법을 모르겠다.

미리 감사드립니다.

프랑.

+0

어디서부터 시작? Perl, http://www.perl.org/ :) – zrvan

답변

4

방법에 대해 :

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

테스트하지 않았다

,하지만 작동합니다.

다음이 oneliner이 tail -f이 madatory하지

+0

와우 ... 정말 빨랐어 요! 나와 함께 지식을 공유해 주셔서 감사합니다! – Fracu

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

+0

감사합니다. 나는 그것을 시도 할 것이다. 그러나 켄트의 oneliner 내가 예상대로 작동합니다. – Fracu

1

경우 예에 따라 3 개 개의 파일이 .txt 서버 {1,2,3}를 생성합니다, 당신은 또한 수행 할 수 있습니다

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