如何使用 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
我必须从网页中收集数据,并将其转换为 .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