Usando TXR :
@(repeat)
@ (cases)
@param: @val [@units] (@rawdesc)
@ (or)
@param: @val [@units] @rawdesc
@ (or)
@param: @val [@units]
@ (bind rawdesc nil)
@ (or)
@param: @val @units (@rawdesc)
@ (or)
@param: @val @units @rawdesc
@ (or)
@param: @val @units
@ (bind rawdesc nil)
@ (or)
@param: @val
@ (bind units "")
@ (bind rawdesc nil)
@ (end)
@ (bind desc @(if rawdesc ' (@(regsub #/,/ "" rawdesc))' ""))
@ (output)
@param@desc, @val, @units
@ (end)
@(end)
Executar:
$ txr tocsv.txr data.txt
Concurrency Level, 1,
Time taken for tests, 0.004, seconds
Complete requests, 1,
Failed requests, 0,
Total transferred, 838, bytes
HTML transferred, 632, bytes
Requests per second (mean), 257.40, #/sec
Time per request (mean), 3.885, ms
Time per request (mean across all concurrent requests), 3.885, ms
Transfer rate (received), 210.65, Kbytes/sec
Embora pareça detalhado devido à "escada" dos casos, eles eram fáceis de serem copiados e colados. O código produziu os resultados desejados na primeira tentativa e é transparente para entender: de relance, você obtém a imagem do que está procurando.
A ordem dos casos é significativa. Se o caso começar com a partida
@param: @val
foram colocados primeiro, val
consumiria todo o valor depois dos dois pontos e espaços.