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

如何使用AWK将.txt文件转换为.csv,csv,awk,export-to-csv,Csv,Awk,Export To Csv,我必须从一个网页收集数据,该网页将被转换成.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 |

我必须从一个网页收集数据,该网页将被转换成.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之后使用管道“|”作为分隔符的值。或者更好: 编辑:

以这种格式: 8625 | 4.027000 | 96.648000 |-96.648000

我没有使用AWK的经验,到目前为止,我已经成功地写了以下内容:

/Non ci sono dati/{
      exit
    }

    /sessione del/{
         data =  $3
    }

    /MGP/{
        data = data $0 

        print data
    }

    /Non ci sono dati/{
        print $0
    }
当页面显示“Non-ci-sono-dati”时,尝试捕捉“no-data”情况。如何获取第一行下的值(具有8625值的行?)。你能帮忙吗?
谢谢

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


您想要获取的MGP数据的边界是什么?显然,它不是换行符,也不是管道字符。您无法从MGP行获取第一个值,因为您将立即调用getline来读取包含第一个值的行之后的行
getline
很少是正确的方法,但是如果您正在考虑使用它,那么请确保您理解会议上讨论的所有内容。您的问题显示了您所期望的确切输出给定您提供的示例输入,它工作得非常完美!我不会打扰你询问关于代码结构的问题,但我会尝试研究它,因为我对AWK一无所知。非常感谢。听起来不错,不客气。在每个sub()之前和之后添加一些print`语句,至少看看发生了什么,如果有问题,请随时提问。
/Non ci sono dati/{
      exit
    }

    /sessione del/{
         data =  $3
    }

    /MGP/{
        data = data $0 

        print data
    }

    /Non ci sono dati/{
        print $0
    }
$ cat tst.awk
sub(/^[[:space:]]*MGP[^|]+[|][[:space:]]*/,"") { inMgp=1 }
inMgp {
    sub(/[[:space:]]*[|][[:space:]]*$/,"")
    if ( NF ) {
        data = data $0
    }
    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