2013-09-22 3 views
0

아래 첨부 된 txt 파일에 일부 입력이 있습니다. 콜론 다음에 값이 첫 번째 열에있는 변수 x1에서 x6을 추출하고 싶습니다.txt 파일에서 데이터 추출

data = textscan(fileID,'%s %s %f %f %f') 

을하지만 그것은 작동하지 않았다 :

(최초의 2 배 -1.55155599552781E + 00 예를 들어) 나는 이미 시도했다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

729 6 
=========================================================================== 
solution 1 : 
t : 1.00000000000000E+00 0.00000000000000E+00 
m : 1 
the solution for t : 
x2 : -1.55155599552781E+00 -2.39714921318749E-46 
x4 : -2.01518902001522E+00 1.29714616910194E-46 
x1 : 1.33015840530650E+00 2.03921256321194E-46 
x6 : -2.10342596985387E+00 1.19910915953576E-46 
x3 : 1.27944237849516E+00 1.99067515607667E-46 
x5 : 2.44955616711054E+00 -1.48359823527798E-46 
== err : 2.178E-13 = rco : 2.565E-05 = res : 1.819E-11 == 
solution 2 : 
t : 1.00000000000000E+00 0.00000000000000E+00 
m : 1 
the solution for t : 
x2 : 1.55762648294693E+00 1.44303635803762E-45 
x4 : 2.10025771786320E+00 -6.99274E-46 
x1 : -1.28451613237821E+00 -1.19859598871142E-45 
x6 : 2.01187184051108E+00 -7.54361111776421E-46 
x3 : -1.33529118239379E+00 -1.22818883958157E-45 
x5 : -2.44570040628148E+00 8.62982269594568E-46 
== err : 2.357E-13 = rco : 2.477E-05 = res : 1.637E-11 == 

답변

1

당신은 당신이에있어 어떤 플랫폼 언급하지 않거나 사용할 수있다, 그러나 여기 awk를 사용하여 하나의 방법 무엇 도구 :

$ awk '/^ x[1-6]/{print $1, $3}' f1 
x2 -1.55155599552781E+00 
... 
이 같은

$ awk '/^ x[1-6]/{print $3}' your_input 
-1.55155599552781E+00 
-2.01518902001522E+00 
1.33015840530650E+00 
-2.10342596985387E+00 
1.27944237849516E+00 
2.44955616711054E+00 
1.55762648294693E+00 
2.10025771786320E+00 
-1.28451613237821E+00 
2.01187184051108E+00 
-1.33529118239379E+00 
-2.44570040628148E+00 

또는

또는 grepcut :

$ grep '^ x[1-6]' your_input | cut -d' ' -f-4,5 
x2 : -1.55155599552781E+00 
... 

펄 :

perl -lane 'print $F[2] if /^ x[1-6]/' your_input 

바보 같은 간단한 파이썬 : 나오지

#!/usr/bin/env python 

with open("f1") as fd: 
    for line in fd: 
     if line.startswith(' x'): 
      print line.strip().split()[2] 

가 :

파이썬에서
$ sed -n 's/^ x[1-6] : *\([^ ]*\).*$/\1/p' your_input 
0

이이

import re 

vars = {} 
for x in open("data.txt"): 
    m = re.match("^\\s+(x\\d+)\s+:\\s+([^ ]*).*", x) 
    if m: 
     vars[m.group(1)] = float(m.group(2)) 
    if re.match("^== err.*", x): 
     # Got a full solution 
     print vars 
     vars = {} 

때 어떻게해야 전체 솔루션은

vars['x1'] 
vars['x2'] 

이미 부동 소수점 숫자

로 변환으로 변수를 사용할 수 있습니다 발견
관련 문제