Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash提取数字并转换为CSV文件_Bash_Csv_Unix - Fatal编程技术网

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

使用bash提取数字并转换为CSV文件,bash,csv,unix,Bash,Csv,Unix,我对使用bash进行提取非常陌生,但我不知道用什么搜索词来查找我的问题。我喜欢从一个非常大的日志文件中提取一些变量的数据 日志文件示例 temp[min,max]=[ 24.0000000000000 .. 834.230000000000 ] CHANGE working on TEMS RMS(TEMS)= 6.425061887244621E-002 DIFMAX: 0.896672707535103 765

我对使用bash进行提取非常陌生,但我不知道用什么搜索词来查找我的问题。我喜欢从一个非常大的日志文件中提取一些变量的数据

日志文件示例

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 ###
要得到这个

  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|ux|Max|uy|Max|uz|Min|ux|Min|uy|Min|uz|Avg|ux|Avg|y|Avg|z

我想继续使用bash来获取这些数据。任何意见都将不胜感激


谢谢

你有一个好的开始。我之前有一个更糟糕的解决方案,但后来我了解了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
  • 去掉带有'--'的行
  • 去掉最小值:最大值:平均值:
  • 每三行用逗号连接
  • 去掉空格

显示原始数据以及根据123建议添加的原始数据,这令人印象深刻。。。我想到了一个awk解决方案,这个解决方案要复杂得多,谢谢!我第一次试的时候,里面又装了三根管子。像这样的事情有很多方法…谢谢你的帮助。我可以确认功能是否正常工作。
grep -A 3 'Courant-Number in x,y,z' logfile.log |
    grep -A 2 'Max.' |
    grep -v -- '--' |
    sed 's/^.*://' |
    paste -d "," - - - |
    sed 's/ *//g'