2013-01-07 2 views
1

Linux를 처음 사용하며 추출 할 텍스트 로그 파일이 매우 큽니다. 나는 bash를 사용하려고 생각 했는가?bash를 사용하여 파일에서 텍스트 추출

예를 들어, 파일이 포함되어 및 정보 후 텍스트에 추가 :

Node:xyz 
Time:01/07/13 14:26:17 
INFO: Trusted certif ok 

Node:abc 
Time:01/07/13 14:26:18 
INFO: Trusted certif ok 

Node:def 
Time:01/07/13 14:26:18 
INFO: Trusted certif not ok 

내가 노드 이후의 텍스트를 추출 할 필요가 한 줄에 표시, 출력은 새 파일로 리디렉션합니다 . 나는 awk와 sed를 시도하고있다. 그러나 그것을 아직 이해하지 못했다. 많은 도움을 주셨습니다.

예 출력이 보일 것 같은 :

xyz Trusted certif ok 
abc Trusted certif ok 
dbf Trusted certif not ok 

답변

7

이 일을보십시오 :

에서

awk -F: '/^Node/{v=$2}/^INFO/{print v $2}' file.txt 

에 :

while IFS=: read -r c1 c2; do 
    [[ $c1 == Node ]] && var=$c1 
    [[ $c1 == INFO ]] && echo "$var$c2" 
done < file.txt 

을에: 에서

perl -F: -lane ' 
    $v = $F[1] if $F[0] eq "Node"; 
    print $v, $F[1] if $F[0] eq "INFO" 
' file.txt 

(파일에서, 용도 : ./script.py file.txt) :

import sys 
file = open(sys.argv[1]) 
while 1: 
    line = file.readline() 
    tpl = line.split(":") 
    if tpl[0] == "Node": 
     var = tpl[0] 
    if tpl[0] == "INFO": 
     print var, tpl[1] 
    if not line: 
     break 
+2

+1 awk 솔루션입니다. bash 솔루션을 사용하지 마십시오. –

+0

고맙습니다. awk는 당신의 도움처럼 굉장합니다. – user1956368

+0

+1 순수한 '배쉬'솔루션! – TrueY

0

은 나오지 사용 :

sed -n '/^Node/N;/Time/N;s/^Node:\([^\n]*\)\n[^\n]*\n[^ ]* /\1 /p' input 
0
perl -F: -lane '$x=$F[1] if(/^Node:/);if(/^INFO:/){print "$x".$F[1];}' your_file 

아래 테스트 :

> cat temp 
Node:xyz 
Time:01/07/13 14:26:17 
INFO: Trusted certif ok 

Node:abc 
Time:01/07/13 14:26:18 
INFO: Trusted certif ok 

Node:def 
Time:01/07/13 14:26:18 
INFO: Trusted certif not ok 

> perl -F: -lane '$x=$F[1] if(/^Node:/);if(/^INFO:/){print "$x".$F[1];}' temp 
xyz Trusted certif ok 
abc Trusted certif ok 
def Trusted certif not ok 
0
sed -n 'N;N;s/\n.*\n/ /;s/\S*://g;p;n' file 
관련 문제