2012-01-27 24 views
3

我有這些行重複掠一批六行下方的圖案

       FINAL RESULTS 



    NSTEP  ENERGY   RMS   GMAX   NAME NUMBER 
    1000  -4.7910E+01  2.1328E-01  9.4193E-01  C   62 

最終結果指示用於一組平均的那些值的。輸出文件組合了所有1000組。我需要抓住能量以下的數字(-4.7910E + 01),把它們全部放入另一個文件中。我需要將FINAL RESULTS設置爲模式,因爲其他模式(如NSTEP,ENERGY,RMS ....)會以百萬爲單位重複。

我會感謝任何幫助。

+0

我對這個不太清楚,你想*所有的* 1000線下面的'ENERGY',或僅僅是第一? – Kevin 2012-01-27 22:38:50

+0

這些文件中有一千個。我需要低於能源的所有1000個數字。 – 2012-01-27 22:40:17

+0

哦,我想我看到,整個'最終結果\ n ... ENERGY \ n ...'圖案重複? – Kevin 2012-01-27 22:42:57

回答

6

像這樣的東西應該爲你工作:

awk '/FINAL RESULTS/{for (i=0; i<5; i++) getline; print $2}' <filename> 
+0

這隻打印一個值。 – potong 2012-01-29 08:18:18

+0

@potong感謝您的評論。我測試了多個值並且工作正常。您能否告訴我一個輸入示例不會產生預期結果? – jcollado 2012-01-29 16:12:13

+0

我欠你一個道歉。我認爲'ENERGY'下面有一千行不是說有1000個'FINAL RESULTS'。 – potong 2012-01-29 16:54:58

3

OK,我想我現在看到。

awk 'found==1 { print $2; found=0 } $2=="ENERGY" { found=1 }' inputfile 

這將讓下面ENERGY數量不管有多少行有它和FINAL RESULTS之間。

+0

這不使用該模式「FINAL結果」,因此它會輸出下的「能量」爲其他部分(「n步驟」等)中的值。 – 2012-01-28 17:17:00

0

這可能會爲你工作:

awk '/FINAL RESULTS/{f=1;p=0}{p++}f==1 && p==6{print $2}' file 

或者,如果你喜歡:

awk 'f==2 && p==1{print $2}{p++}/FINAL RESULTS/{f=1}/ENERGY/ && f==1{f=2;p=0}' file 
0

隨着GNU grep(和一些其他人繼續其擴展),你可以做一些像grep -A 6 'FINAL RESULTS'

所以這應該適用於Linux和我看到它工作在最近的一個MacOS X和我敢肯定,我已經使用了FreeBSD上。所以它可能適用於你將遇到的大多數UNIX形式。 (如果沒有,請安裝GNU「coreutils」軟件包)。