如何使用 AWK 将 .txt 文件转换为 .csv

How to convert a .txt file into .csv using AWK

我必须从网页中收集数据,并将其转换为 .txt 文件。出于操作目的,必须使用 AWK 脚本将此 txt 转换为 csv。

txt 具有以下结构:

    GME - Esiti dei mercati - MGP-GAS - asta (AGS) 
    Tabella esiti - MGP-GAS prezzi e volumi Esiti MGP-GAS ||

       |sessione del: 30/03/2020    |
    |
    |
    Prodotti |
    Prezzo |
    €/MWh |
    Volumi totali |
    MW |MWh |
    Acquisti SRG_TSO |
    MWh |
    Vendite SRG_TSO |
    MWh |

    MGP-2020-03-31 |8,625 |
    |4.027,000 |96.648,000 |
    |- |
    |96.648,000 |
    |

    |
    |
    |
    |
    Legenda 
    ||
    LEGENDA ||
    Prezzo  
    |Prezzo di remunerazione di cui all'Art. 103 della disciplina del Mercato del Gas naturale. 
    |
    Volumi (MW, MWh)  
    |Volumi accettati di cui all'Art. 103 della disciplina del Mercato del Gas naturale. 
    |
    Acquisti SRG_TSO  
    |Quantità accettate in acquisto da Snam Rete Gas. 
    |
    Vendite SRG_TSO  
    |Quantità accettate in vendita da Snam Rete Gas. 
    |
    |

我需要获取并导入到 csv 中的值是 MGP-2020-03-31 之后使用管道“|”的值作为分隔符。或更好: 编辑:

    MGP-2020-03-31 |8,625 |
    |4.027,000 |96.648,000 |
    |- |
    |96.648,000 |
    |

采用这种格式: 8,625|4.027,000|96.648,000|- |96.648,000

我没有使用 AWK 的经验,到目前为止我已经设法写了这个:

/Non ci sono dati/{
      exit
    }

    /sessione del/{
         data =  
    }

    /MGP/{
        data = data [=12=] 

        print data
    }

    /Non ci sono dati/{
        print [=12=]
    }

试图在页面显示 "Non ci sono dati" 时捕获 "no data" 案例。如何获取第一行下方的值(具有 8,625 值的行?)。你能帮忙吗? 谢谢

以下是解决问题的方法(假设输入中的空行或只有 | 的行表示 MGP 部分结束):

$ cat tst.awk
sub(/^[[:space:]]*MGP[^|]+[|][[:space:]]*/,"") { inMgp=1 }
inMgp {
    sub(/[[:space:]]*[|][[:space:]]*$/,"")
    if ( NF ) {
        data = data [=10=]
    }
    else {
        gsub(/[[:space:]]*[|][[:space:]]*/,"|",data)
        print data
        inMgp = 0
    }
}

$ awk -f tst.awk file
8,625|4.027,000|96.648,000|-|96.648,000