2016-02-05 115 views
3

我在使用bash進行提取時很新,但我不是用什麼搜索條件來查找我的問題。我喜歡從非常大的日誌文件中提取某些變量的數據。使用bash提取數字並將其轉換爲CSV文件

日誌文件

temp[min,max]=[ 24.0000000000000  .. 834.230000000000  ] 
CHANGE working on TEMS 
RMS(TEMS)= 6.425061887244621E-002 DIFMAX: 0.896672707535103  
       765      1     171 
CHANGE working on PHI 
RMS(PHI)= 1.92403467949391  DIFMAX: 62.3113693145351  
       765      1     170 
CHANGE working on TEMP 
RMS(TEMP)= 6.425061887244621E-002 DIFMAX: 0.896672707535103  
       765      1     171 
PMONI working 
TIMSTP working 

COPEQE working : INFO 
DELT = 630720000.000000  sec  

Courant-Number in x,y,z: 
Max. : 5.05 ,  0.00 ,  6.93  
Min. : 0.00 ,  0.00 ,  0.00  
Avg. : 0.568E-02,  0.00 ,  0.383  
PROBLEM: Courant-Number(s) greater than 1 : 11.9802093558263  
max. TEMP-Peclet in X:      653      1 
       170 
max. TEMP-Peclet in Y:      653      1 
       170 
Temperature-Peclet-Number in x,y,z: 
Max. : 0.357 ,  0.00 ,  0.313E-01 
Min. : 0.00 ,  0.00 ,  0.00  
Avg. : 0.307E-03,  0.00 ,  0.435E-03 
Temperature-Neumann-Number in x,y,z: 
Max.: 64.9 , 64.9 , 64.9  
Min.: 0.619E-02, 0.619E-02, 0.619E-02 
Avg.: 35.5 , 35.5 , 35.5  
PROBLEM: Temp-Neumann-Number greater than 0.5 : 194.710793368065  
(Dominating: Courant-Number) 
DRUCK working 
KOPPX working 
######################################################################### 
STRESS PERIOD:      1      1 
       1 of     100 <<<<< 
Time Step:  50 ( 1.0% of 0.315E+13 sec  )(0.631E+09 sec  ) 
######################################################################### 

### Continues on ### 

的樣品我設法提取與我要找使用bash的變量線。

grep -A 3 'Courant-Number in x,y,z' logfile.log > courant.txt 
grep -A 2 'Max.' courant.txt > courant.txt 

得到這個...

Max. : 0.146E+04,  0.00 ,  0.169E+04 
    Min. : 0.00 ,  0.00 ,  0.00  
    Avg. : 1.15 ,  0.00 ,  0.986  
-- 
    Max. : 0.184E+04,  0.00 ,  0.175E+04 
    Min. : 0.00 ,  0.00 ,  0.00  
    Avg. : 1.13 ,  0.00 ,  1.05  
-- 
    Max. : 0.163E+04,  0.00 ,  0.172E+04 
    Min. : 0.00 ,  0.00 ,  0.00  
    Avg. : 1.13 ,  0.00 ,  1.17 

我想這個數據轉換成CSV有以下的列文件,從而使共9列。

Max_x | Max_y | Max_z | Min_x | Min_y | Min_z | Avg_x | Avg_y | Avg_z

我想繼續使用bash得到這個數據。任何投入都將非常感激。

謝謝!

+0

也顯示原始數據 – 123

+0

根據123建議添加原始數據 – quenchlemon

回答

4

你有一個好的開始。我早些時候遇到了更糟的解決方案,但後來我學習了關於paste -d的知識。

grep -A 3 'Courant-Number in x,y,z' logfile.log | 
    grep -A 2 'Max.' | 
    grep -v -- '--' | 
    sed 's/^.*://' | 
    paste -d "," - - - | 
    sed 's/ *//g' 
  • 發現Courant數+ 3線
  • 發現MAX + 2以下行
  • 擺脫有行 ' - '
  • 擺脫分鐘:最大:平均:
  • 每三行用逗號連接
  • 擺脫空白的
+0

這令人印象深刻......我有一個awk解決方案,記得本來會更復雜 – Hambone

+0

謝謝!我第一次嘗試了三個左右的管道。有這麼多的方式來做這樣的事情... – 22degrees

+0

感謝您的幫助scf。我可以確認功能的作品。 – quenchlemon

相關問題