简体   繁体   English

使用bash提取数字并转换为CSV文件

[英]Using bash to extract numbers and convert to CSV file

I am quite new in using bash to extract but I am not what search terms to look for my problem. 我是使用bash提取的新手,但我不是寻找我的问题的搜索条件。 I like to extract data for some variables from a very large log file. 我喜欢从一个非常大的日志文件中提取一些变量的数据。

Sample of logfile 日志文件的示例

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 ###

I managed to extract the lines relating to the variables I am looking for using bash. 我设法使用bash提取与我正在寻找的变量相关的行。

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

to get this... 得到这个......

  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  

I would like to convert this data to a CSV file with the following columns, thus making a total of 9 columns. 我想将此数据转换为包含以下列的CSV文件,从而总共生成9列。

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

I would like to continue to use bash to get this data. 我想继续使用bash来获取这些数据。 Any inputs will be most appreciated. 任何输入将是最受欢迎的。

Thanks! 谢谢!

You've got a good start. 你有个好的开始。 I had a much worse solution a bit earlier, but then I learned about paste -d. 我之前有一个更糟糕的解决方案,但后来我学会了粘贴-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'
  • find courant number + 3 lines 找到courant号+3行
  • find max + 2 following lines 找到最多+ 2行以下
  • get rid of lines that have '--' 摆脱有' - '的行
  • get rid of min: max: avg: 摆脱min:max:avg:
  • join every three lines with commas 用逗号连接每三行
  • get rid of whitespace 摆脱空白

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM