2012-03-07 6 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" 

は私のステップがあります

あなたは簡単な方法に助けてくれますか? Windows OSとwinpe 3.0環境。 は、と私はこの結果を取得したい "ノーマルABC2 =を設定し、設定ABC3 =ノーマルまたは使用可能;セットabc4 =ノーマル" Pythonで

+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

ok、明確なサポートをいただきありがとうございます – Sam

+1

@getjoefree - a +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 
関連する問題