2014-04-07 3 views
0

로그 파일에서 데이터를 추출하기 위해 다시 awk와 싸우고 있습니다.awk가 텍스트 문자열 사이에서 데이터 블록을 추출합니다.

4C*DJ - (B-C)*DJK + 2*(2A+B+C)*D1 - 4*(4A+B-3C)*D2 = 0 
Value =  0.5293955920D-22 

Alpha Matrix in cm-1 
Axis Mode Inertia  Coriol.  Anharm.  Total 
x 1 -0.37699D-03 -0.36413D-02 0.10830D-01 0.68121D-02 
x 2 -0.83656D-03 -0.53163D-02 0.14483D-01 0.83306D-02 
x 3 -0.15253D-02 -0.10512D-01 0.20064D-01 0.80264D-02 
x 4 -0.17103D-03 -0.73492D-03 0.14953D-01 0.14047D-01 
x 5 -0.96312D-03 -0.11748D-01 0.15825D-02 -0.11128D-01 
x 6 -0.46095D-03 -0.94225D-02 0.44165D-02 -0.54669D-02 
x 7 -0.26926D-01 -0.10167D-01 0.29406D-01 -0.76866D-02 
x 8 -0.17827D-02 -0.21079D-01 0.74564D-02 -0.15405D-01 
x 9 -0.55840D-02 0.84897D-01 -0.29596D-02 0.76354D-01 
x 10 -0.50287D-24 0.36312D-01 -0.44078D-02 0.31904D-01 
x 11 -0.48777D-24 -0.63320D-01 0.18876D-02 -0.61432D-01 
x 12 -0.35364D-24 0.42877D-01 0.62352D-03 0.43500D-01 
y 1 -0.23141D-05 -0.13777D-03 0.53278D-03 0.39270D-03 
y 2 -0.62128D-05 -0.87905D-04 0.36602D-03 0.27190D-03 
y 3 -0.55613D-05 -0.33722D-04 0.28874D-03 0.24946D-03 
y 4 -0.47995D-04 -0.60863D-03 0.17426D-02 0.10860D-02 
y 5 -0.36076D-04 -0.20493D-03 0.12026D-03 -0.12075D-03 
y 6 -0.12725D-03 -0.61930D-03 -0.15830D-03 -0.90485D-03 
y 7 -0.19917D-03 -0.55423D-04 0.10520D-02 0.79740D-03 
y 8 -0.48978D-03 -0.13733D-02 0.54899D-03 -0.13141D-02 
y 9 -0.11432D-02 0.62058D-03 -0.20074D-04 -0.54272D-03 
y 10 -0.16078D-24 0.20852D-02 -0.88466D-04 0.19967D-02 
y 11 -0.63877D-25 0.18274D-03 -0.13682D-03 0.45922D-04 
y 12 -0.43257D-25 0.92039D-03 -0.61669D-03 0.30370D-03 
z 1 -0.69174D-07 -0.23737D-03 0.59290D-03 0.35547D-03 
z 2 -0.60773D-05 -0.18704D-03 0.53271D-03 0.33960D-03 
z 3 -0.46425D-05 -0.29722D-03 0.57403D-03 0.27217D-03 
z 4 -0.22234D-04 -0.47670D-03 0.15748D-02 0.10759D-02 
z 5 -0.20254D-04 0.24124D-03 0.11848D-03 0.33947D-03 
z 6 -0.42788D-04 0.99264D-04 -0.40246D-04 0.16230D-04 
z 7 -0.10941D-03 0.30020D-03 0.13135D-02 0.15043D-02 
z 8 -0.19997D-03 0.32196D-03 0.54501D-03 0.66699D-03 
z 9 -0.20819D-03 0.45666D-03 -0.67765D-04 0.18071D-03 
z 10 -0.55249D-25 0.00000D+00 -0.14491D-03 -0.14491D-03 
z 11 -0.55828D-26 0.00000D+00 -0.69139D-04 -0.69139D-04 
z 12 -0.26265D-26 0.00000D+00 -0.45200D-03 -0.45200D-03 

Vibro-Rot alpha Matrix (cm-1) 
      a(z)   b(x)   c(y) 
Q(1)  0.00681  0.00039  0.00036 

내가 "X 1 -0.37 (이 경우)에서 데이터를 추출해야합니다 : 내 로그 파일의 해당 지역은 그러나 몇 천 개 라인이 블록 위와 아래가, 다음과 같습니다. .. "~"z 12 -0.262 ... "

내가 알고있는 지점으로 데이터를 추출하기 위해 awk를 얻을 수 있다면 파일을 head and tail 할 수 있습니다. 저는이 파일 중 약 300 개를 가지고 있는데, 각기 다른 수의 선로를 가지고 있기 때문에 선 수를 계산할 수는 없지만 "Axis Mode Inertia ..."로 시작하여 "Vibro-Rot alpha Matrix"로 끝납니다.

내가 현재 사용하려고 해요 :

(그것은 내가 이후에 차단 할 수있는 헤더를 포함하지만) 파일의 시작을 얻기 위해 노력
awk '$1=="Axis"&&$2=="Mode"{t=1};t;/[0-9]+ "Vibro-Rot alpha Matrix"/{exit}' file.log 

. 그러나 awk 명령의 마지막 부분은 작동하지 않습니다.^Vib/{exit}와 다른 것들로 끝내려고했으나 아무것도 작동하지 않는 것 같습니다. 단지 내가 할 때 로그 파일을 몇 천 줄만 받았습니다.

필자가 확신 하듯이 맨 위에는 "축"앞에, 파일 맨 아래에는 "바이브로 - 썩음 (Vibro-Rot)"앞에 하나의 공백이 있습니다. "$ 1 =="축 "& & $ 2 =="모드 "부분은 하나의 공백을 고려하지 않습니다.

"Vibro-Rot alpha Matrix"가있는 줄까지 잘라낼 수없는 것은 무엇입니까?

미리 감사드립니다.

답변

0

:

awk '$1 == "Axis" && $2 == "Mode" {t = 1;} $1 == "Vibro-Rot" && $2 == "alpha" && $3 == "Matrix" {t = 0;} t == 1 && NF == 6 {print $0}' file.log 

머리글을 원하지 않는 경우, 시도 :

awk '$1 == "Vibro-Rot" && $2 == "alpha" && $3 == "Matrix" {t = 0;} t == 1 && NF == 6 {print $0} $1 == "Axis" && $2 == "Mode" {t = 1;}' file.log 
+0

둘 다 완벽하게 작동합니다! 나는 양쪽 다 시험해 보았던 것처럼 느낀다. 그러나 나는 명백하게 무엇인가 위로 어 지르게했다. 엄청 고마워! – user3246787

+0

당신은 환영합니다 ;-) – arutaku

0

시도 뭔가 같은 :

awk '!NF{p=0}p; /Axis Mode/{p=1}' file.log 

- 원래의 접근 방식을 사용 : 방법에 대해 : 그것은 나를 위해 일한

awk '/Vibro-Rot alpha Matrix/{exit}t; $1=="Axis"&&$2=="Mode"{t=1}' file.log 
+0

"NF : Event not found"가 표시됩니다. 내가 그걸 달릴 때. 내 맥 그냥 지체와 awk의 나쁜 버전이 있습니까? – user3246787

+0

큰 따옴표가 아닌 작은 따옴표를 사용하십시오. 그렇지 않으면'bash'의 내역 확장이 간섭을 일으 킵니다 (느낌표는'!'(느낌표)를 해석합니다). 'awk'의 버전은 BSD awk이고 괜찮습니다 .. 여전히 문제가 있다면'! NF' 대신'NF == 0'을 사용하십시오 – Scrutinizer

+0

@ user3246787 : 위를보십시오 – Scrutinizer

0

허을? grep :

관련 문제