2012-03-07 2 views
0

log.txt에 형식 :내가 log.txt에 파일에서이 문자열을 얻을 싶어하는 방법

iffs.sed 
/Bootable/{ 
n; 
s/^.*[0-9],\"([a-zA-Z]+)\",.*$/set abc=\1/p; 
} 
1. sed -nrf iffs.sed log.txt 
result: set abc=Normal 
2. sed "2d" log.txt |sed -nrf iffs.sed 
result: set abc=Normal or Available 
3. sed "2,3d" log.txt |sed -nrf iffs.sed 
result: set abc=Normal 
:

;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name 
0,0,32kB,8192,"Normal","Yes",0,"FFS" 
1,0,128kB,19046,"Normall","No",0,"Dev_Cache" 
2,0,64kB,305244,"Normalll","Yes",1,"0W24SWKT" 

또는 다른 형식 : 아래

;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name 
0,0,32kB,8192,"Normal","Yes",0,"FFS" 
1,0,128kB,19046,"Available","No",0,"Dev_Cache" 
2,0,64kB,305244,"Normal","Yes",1,"0W24SWKT" 

내 단계는

간단한 방법으로 도움을 줄 수 있습니까? 윈도우 OS와 윈프 3.0 환경. 와 나는이 결과를 얻으려면 "일반 abc2 = 설정, 설정 abc3 = 정상 또는 사용 가능한; 설정 abc4 = 정상"파이썬에서

+1

어떤 문자열 것은 당신이 얻을려고? – gfortune

+0

이 질문은 Python, C, sed 및 AWK 태그가 지정되어 있습니다. – chrisaycock

+1

좋은 점은 데이터 형식이 "awk를 사용하라"고 소리 치거나 동일한 질문을하는 것입니다. 지금은 awk -F, '... {print "abc ="$ 5}; ...'log.txt – technosaurus

답변

1

:

for line in open('log.txt'): 
    print 'abc=' + line.split(',')[4] 
1
[[email protected] ~/tmp]$ cat data 
;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name 
0,0,32kB,8192,"Normal","Yes",0,"FFS" 
1,0,128kB,19046,"Available","No",0,"Dev_Cache" 
2,0,64kB,305244,"Normal","Yes",1,"0W24SWKT" 
[[email protected] ~/tmp]$ cat doit.awk 
#!/usr/bin/awk -f 

BEGIN { 
    FS=","; 
    ind=ARGV[1]; 
    ARGV[1]=""; 
} 

$1 == ind { 
    gsub(/"/, "", $5); 
    print $5; 
} 

[[email protected] ~/tmp]$ ./doit.awk 2 data 
Normal 
[[email protected] ~/tmp]$ ./doit.awk 1 data 
Available 
[[email protected] ~/tmp]$ 

그리고 당신의 인덱스가 보장 아닌 경우 파일에서 반복하려면 print $5 뒤에 nextfile을 입력하여 처리 속도를 높일 수 있습니다.

+0

괜찮습니다. 명확한 지원을 부탁드립니다. – Sam

+1

@getjoefree - +1은 감사 인사 할 수있는 훌륭한 방법입니다. :) – Graham

0

이 당신을 위해 작동 될 수 있습니다

sed '1d;=;s/[^"]*"\([^"]*\).*/\1/' log.txt | sed 'N;s/\n/=/;s/^/set abc/' 
set abc2=Normal 
set abc3=Available 
set abc4=Normal 
관련 문제