在bash脚本中使用多字符分隔符

时间:2014-02-08 08:20:52

标签: bash ifs

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

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”作为分隔符。是否允许?
感谢

1 个答案:

答案 0 :(得分:0)

你可以使用这个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