4

我有一个文本文件,其中数据的形式为:

Number of Iterations: 150
Average time is 45 ms
Average time for collisions is 50 ms
Total time is 95 ms
....

有多个此类文件。我必须阅读所有这些文件并制作一个包含以下表单条目的 csv 文件:

150,45,50,95
200,40,60,100 
...
...

其中每一行对应一个txt文件。
我正在编写一个 bash 脚本来从这些数据中生成 CSV 文件。
我只想从文本文件中读取数字。
对于我尝试使用的第一行

    IFS =": " read w1 w2

但它通过使用空格也作为分隔符以及':'来分割线
当我使用

    IFS=":" 

在我不想要的 150 前面打印了一个额外的空间。
我该怎么做呢?
同样在第二行中,我想使用“is”作为分隔符。是否允许?
谢谢

4

1 回答 1

1

你可以使用这个 awk:

cat file
Number of Iterations: 150
Average time is 45 ms
Average time for collisions is 50 ms
Total time is 95 ms
Number of Iterations: 200
Average time is 40 ms
Average time for collisions is 60 ms
Total time is 100 ms

awk '/^Total/{p=1} {gsub(/[^0-9]+/, ""); a[++i]=$0}
     p{print a[1], a[2], a[3], a[4]; p=0; delete a; i=0}' OFS=, file
150,45,50,95
200,40,60,100
于 2014-02-08T09:48:55.087 回答