Closed pigreco closed 1 year ago
Totò, le espressioni regolari ci sono anche qui.
Visto che non vuoi MultiPolygonM
, potresti scrivere
mlr --csv filter '$geom_type=~"^MultiPolygon(Z|ZM)*$"' out2.csv
dovrei raggruppare le righe che, nella colonna
geom_type
, hanno valori che contengono i seguenti termini:
Non ho capito però l'obiettivo. In che senso raggruppare? Mi aggiungi un esempio di output?
Mi aggiungi un esempio di output?
qui un esempio di output per il caso Polygon
Quindi non vuoi raggruppare, ma soltanto filtrare. Ad esempio tutti i poligoni?
Se sì, puoi usare le regex
@aborruso come faccio a fare espandere la variabile nel ciclo FOR?
for i in none Line Point Polygon; do
<out.json jq -c '.layers[]|{name:.name,geom_type:(if (.geometryFields|length) > 0 then .geometryFields[].type else "none" end) }' | mlr --ijsonl --ocsv unsparsify then filter '$geom_type=~"^.{0,}$i.{0,}$"'>output2/classe_$i.txt
done
lo script di sopra non va, non vede la $i
dentro $geom_type=~"^.{0,}$i.{0,}$"'
https://github.com/opendatasicilia/tansignari/files/10679184/out.zip
Devi attenerti alle regole del bash e fare attenzione ai caratteri speciali. Ti faccio un esempio con il CSV
for i in Line Point;do
<out2.csv mlrgo --csv unsparsify then filter '$geom_type=~"'"$i"'"';
done
Perché questo strano '"$i"'
?
"$i"
'
, e lì dentro la variabile tra "
non viene esplosa'
con una coppia di '
> '"$i"'
@aborruso grazie,
per me ha funzionato così: '$geom_type=~"^.{0,}'"$i"'.{0,}$"'
#!/bin/bash
set -x
set -e
set -u
set -o pipefail
# lista valori::
# ogrinfo -so "D:\GitHub\ESRI_FileGeodatabase_GDAL\dati\DBGT_10K_22_V01.gdb"
# crea cartella di output
mkdir -p ./output2
# per ogni oggetto
for i in none Line Point Polygon; do
<out.json jq -c '.layers[]|{name:.name,geom_type:(if (.geometryFields|length) > 0 then .geometryFields[].type else "none" end) }' | mlr --ijsonl --ocsv unsparsify then filter '$geom_type=~"^.{0,}'"$i"'.{0,}$"'>output2/classe_$i.txt
done
Esatto, dovevi applicare quanto ti ho scritto, altrimenti la variabile non si sarebbe espansa
ricetta fatta e pubblicata
https://tansignari.opendatasicilia.it/ricette/bash/filtro_regex_con_miller/
Ho un file CSV così fatto:
nella colonna
geom_type
ci sono vari valori (none, PointZ, MultiPolygonZ, MultiLineStringZM, ecc...) dovrei raggruppare le righe che, nella colonnageom_type
, hanno valori che contengono i seguenti termini:none
Point
Line
Polygon
ho usato un filtro con Miller, ma usando
||
(or) devo scrivere tutti i vari casi possibili, sotto un esempio:c'è un modo più snello?
out2.csv