如何使用AWK将.txt文件转换为.csv
我必须从一个网页收集数据,该网页将被转换成.txt文件。出于操作目的,必须使用AWK脚本将此txt转换为csv txt具有以下结构:如何使用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 |
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